首页 > 解决方案 > 如何不选择某些列相同而一列不同的行?

问题描述

这似乎是一件简单的事情,我很惊讶我以前没有做过,但我基本上想删除基于几个不同列的重复项,但只有当特定列不同时。我可以选择在 SQL 或 pandas 中执行此操作,但最好使用 SQL。所以给出以下查询:

SELECT fname, lname, order_date, product_id
FROM T_ORDERS

我想删除 fname、lname 和 product_id 相同且 order_date 不同的所有订单,保留 order_date 较晚的行。有没有一种简单的方法可以在 SQL 中做到这一点?

如果我必须这样做 python/pandas 或者它会更容易,我也可以这样做。

标签: sqlpandasssms

解决方案


一种方法使用not exists

SELECT fname, lname, order_date, product_id
FROM T_ORDERS o
WHERE NOT EXISTS (SELECT 1
                  FROM T_ORDERS o2
                  WHERE o2.fname = o.fname AND o2.lname = o.lname AND
                        o2.product_id = o.product_id AND
                        o2.order_date > o.order_date
                 );

也就是说,选择没有更大日期的订单(对于三列)。


推荐阅读