sql - 如何不选择某些列相同而一列不同的行?
问题描述
这似乎是一件简单的事情,我很惊讶我以前没有做过,但我基本上想删除基于几个不同列的重复项,但只有当特定列不同时。我可以选择在 SQL 或 pandas 中执行此操作,但最好使用 SQL。所以给出以下查询:
SELECT fname, lname, order_date, product_id
FROM T_ORDERS
我想删除 fname、lname 和 product_id 相同且 order_date 不同的所有订单,保留 order_date 较晚的行。有没有一种简单的方法可以在 SQL 中做到这一点?
如果我必须这样做 python/pandas 或者它会更容易,我也可以这样做。
解决方案
一种方法使用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
);
也就是说,选择没有更大日期的订单(对于三列)。
推荐阅读
- javascript - 在 MongoDB 中进行 $lookup 时访问另一个对象数组中的值
- reactjs - 如何创建像 Bootstrap 手风琴这样的组件?
- flutter - Flutter web中鼠标滚动事件的PageView animateToPage
- html - CSS以适合顶栏下方的侧边栏
- javascript - 如何在 react 中为三个 js 设置导入(包括 Obj 加载器)?
- scikit-learn - sklearn.model_selection中GridSearchCV的“cv_results_”属性中split0_test_score的数学含义是什么
- c++ - 有没有办法用 Hana 来表达函数应用运算符/函数?
- spring-boot - 任何对象上的 Spring JPA ManytoMany 循环引用
- jitsi - Jitsi 外部 API 配置
- c# - 如何使用 KeyValuePair 从 List 中获取 ListDictionary 来翻译一些字符串?