Sql 如何不选择某些列相同但一列不同的行?
这似乎是一件很简单的事情,我很惊讶我以前没有做过,但我基本上想删除基于几个不同列的重复项,但只有当特定列不同时。我可以选择在SQL或pandas中执行此操作,但SQL更可取。因此,给出以下查询:Sql 如何不选择某些列相同但一列不同的行?,sql,pandas,ssms,Sql,Pandas,Ssms,这似乎是一件很简单的事情,我很惊讶我以前没有做过,但我基本上想删除基于几个不同列的重复项,但只有当特定列不同时。我可以选择在SQL或pandas中执行此操作,但SQL更可取。因此,给出以下查询: SELECT fname, lname, order_date, product_id FROM T_ORDERS 我想删除fname、lname和product_id相同且订单日期不同的订单,保留订单日期较晚的行。在SQL中有没有一种简单的方法可以做到这一点 如果我必须用python/pandas或
SELECT fname, lname, order_date, product_id
FROM T_ORDERS
我想删除fname、lname和product_id相同且订单日期不同的订单,保留订单日期较晚的行。在SQL中有没有一种简单的方法可以做到这一点
如果我必须用python/pandas或者更简单,我也可以这样做。一种方法使用
不存在:
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
);
也就是说,选择没有更大日期的订单(对于三列)。使用SQL
AFAIK并不是那么容易。您需要以某种方式进行隐式连接
对于熊猫,它是删除重复项
:
(df.sort_values('order_date', ascending=False)
.drop_duplicates(['fname', 'lname', 'product_id'])
)
用你使用的数据库标记你的问题。啊,但是我只想删除重复的问题,如果它们的订单日期不同的话。因此,如果存在fname、lname、product_id和order_date相同的副本,我不想放弃它。但是如果订单日期不一样,我想放弃这个。