私のテーブルは次のようなものです:
Name Order Goods Date
Michael 1 Shoes 2019/04/05
Michael 2 Groceries 2019/05/28
Michael 3 Caps 2019/03/02
Lucas 4 Shoes 2019/02/30
Lucas 5 Caps 2019/03/31
Mary 6 Shoes 2018/04/22
Mary 7 Shoes 2018/03/25
Mary 8 Groceries 2017/08/22
Mary 9 Caps 2019/01/01
次の条件に従って行を削除できるようにクエリを定義する方法は?
何よりもまず、すべてを名前列でグループ化したいと思います。
「靴」は私の参考です。顧客が「靴」を購入したかどうかを確認する必要があります。購入日がその顧客の「靴」の購入日より早い場合(名前列でグループ化されている場合)に限り、他の商品を登録したままにします(つまり、靴の購入日以降に靴が購入された場合、この他の適切な行は削除されます)。
比較する靴の最初の購入日のみを保持します。新しい日付も削除されます。最初のもの(古いもの)のみが保持されます。
だから、私は以下のようなテーブルを持っています:
Michael 1 Shoes 2019/04/05
Michael 3 Caps 2019/03/02
Lucas 4 Shoes 2019/02/30
Mary 7 Shoes 2018/03/25
Mary 8 Groceries 2017/08/22
ありがとうございました
各顧客が靴を注文した最初の日付を計算する集計クエリに参加し、その情報を使用して、削除する行をフィルタリングできます。
delete t
from mytable t
inner join (
select name, min(date) min_date
from mytable
where goods = 'Shoes'
group by name
) t1 on t.name = t1.name and t.date > t1.min_date
名前| OrderID | グッズ| 日付 :------ | ------:| :-------- | :--------- マイケル| 1 | シューズ| 2019-04-05 マイケル| 3 | キャップ| 2019-03-02 ルーカス| 4 | シューズ| 2019-02-28 メアリー| 7 | シューズ| 2018-03-25 メアリー| 8 | 食料品| 2017-08-22
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加