Sql 基于其他列返回具有重复值的行的查询

Sql 基于其他列返回具有重复值的行的查询,sql,sql-server,Sql,Sql Server,我在SQL Server中有一个表,格式如下: 我希望根据以下条件获取行: 如果行具有多个但类似的客户ID和订单编号,则仅返回具有最长日期的行 否则,返回其余行 因此,本例中的结果将是第3、4和5行 您知道如何使用SQL查询实现这一点吗?该表没有主键或唯一键。使用窗口函数行号() 或使用共同关联子查询 select * from t where date in ( select max(date)

我在SQL Server中有一个表,格式如下:

我希望根据以下条件获取行:

  • 如果行具有多个但类似的
    客户ID
    订单编号
    ,则仅返回具有最长日期的行
  • 否则,返回其余行
因此,本例中的结果将是第3、4和5行


您知道如何使用SQL查询实现这一点吗?该表没有主键或唯一键。

使用窗口函数
行号()

或使用共同关联子查询

    select * 
    from t
    where date in (
                   select max(date) 
                   from t t1 
                   where t1.Customer_ID=t.Customer_ID and t1.Order_Number=t.Order_Number
                  )

使用窗口功能
行号()

或使用共同关联子查询

    select * 
    from t
    where date in (
                   select max(date) 
                   from t t1 
                   where t1.Customer_ID=t.Customer_ID and t1.Order_Number=t.Order_Number
                  )

基本上,您只是为表描述了一个唯一的键,您可以使用它来标识行(日期、客户ID、订单号)。您可以使用存储过程来实现您的请求。因此,这是一个检查重复值并返回具有最长日期的行的过程。如果没有,则返回其他行。基本上,您只是为表描述了一个唯一的键,可用于标识行(日期、客户ID、订单号)。您可以使用存储过程来实现请求。因此,这是一个检查重复值并返回具有最长日期的行的过程。如果没有,返回其他行。太好了!谢谢Zaynul,太好了!谢谢Zaynul。