カテゴリと日付を含む2つのテーブルがあります。
表1:
cat date
A 20160102
A 20160103
A 20160104
B 20170202
B 20170203
B 20170204
表2:
cat date
A 20160103
A 20160104
A 20160105
B 20170203
B 20170206
B 20170207
ここで、日付がカテゴリごとに表2の最も早い日付以降である、表1からすべての行を削除したいと思います。
カテゴリAの最も早い日付は20160103
です。カテゴリBの最も早い日付は20170203
です。したがって、エントリは('A','20160103')
、('A','20160104')
、および('B','20170204')
から削除されるべきである。表1。
テストのために、SELECT
削除する値を選択するステートメントを作成しようとしています。現在、私はこれを思いついた:
SELECT
t1.id
,t1.holiday
,MIN(t2.holiday)
FROM
table1 t1
INNER JOIN table2 t2
ON t2.id = t1.id
GROUP BY
t1.id
,t1.holiday
次の論理的なステップ(私にとって)は、次のWHERE
句を追加することです
SELECT
t1.id
,t1.holiday
,MIN(t2.holiday)
FROM
table1 t1
INNER JOIN table2 t2
ON t2.id = t1.id
WHERE
t1.holiday >= MIN(t2.holiday)
GROUP BY
t1.id
,t1.holiday
ただし、これにより次のエラーが発生します。
集計は、HAVING句または選択リストに含まれるサブクエリに含まれておらず、集計される列が外部参照でない限り、WHERE句に表示されない場合があります。
どうすればこの問題を解決できますか?
これは最初の質問に答えます(表1からの削除について)
DELETE t1
FROM Table1 AS t1
INNER JOIN (
SELECT
cat,
min_date=MIN([date])
FROM
Table2
GROUP BY
cat
) AS t2 ON
t2.cat=t1.cat
WHERE
t1.[date]>=t2.min_date
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加