Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何不选择某些列相同但一列不同的行?_Sql_Pandas_Ssms - Fatal编程技术网

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或

这似乎是一件很简单的事情,我很惊讶我以前没有做过,但我基本上想删除基于几个不同列的重复项,但只有当特定列不同时。我可以选择在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 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相同的副本,我不想放弃它。但是如果订单日期不一样,我想放弃这个。