Sql server Sql按顺序按两个日期筛选表

Sql server Sql按顺序按两个日期筛选表,sql-server,tsql,join,filter,Sql Server,Tsql,Join,Filter,我一直在尝试按重要性顺序date2>date1按两个日期筛选一个表,如下所示: SELECT t1.customer, t1.weights, t1.max(t1.date1) as date1, t1.date2 FROM (SELECT * FROM table WHERE CAST(date2 AS smalldatetime) = '10/29/2017') t2 INNER JOIN table t1 ON t1.customer =

我一直在尝试按重要性顺序date2>date1按两个日期筛选一个表,如下所示:

SELECT 
    t1.customer, t1.weights, t1.max(t1.date1) as date1, t1.date2
FROM 
    (SELECT *
     FROM table
     WHERE CAST(date2 AS smalldatetime) = '10/29/2017') t2
INNER JOIN 
    table t1 ON t1.customer = t2.customer
             AND t1.date2 = t2.date2
GROUP BY 
    t1.customer, t1.date2
ORDER BY 
    t1.customer;
它首先按date2正确过滤表,maxt1.date1并不是我想要它做的。我有重复的客户,他们共享相同且正确的日期2,但显示不同的日期1。这些重复记录有以下共同点:权重行不同。如果只输出与最新日期1连接的客户记录,而不考虑其他列,我需要做什么

我还是一个笨蛋,非常感谢你的帮助

t-sql解决方案全部基于公认的答案:

SELECT * FROM (

    SELECT row_number() over(partition by t1.customer order by t1.date1 desc) as rownum, t1.customer, t1.weights, t1.date1 , t1.date2
    FROM 
         (SELECT *
          FROM table
          WHERE CAST(date2 AS smalldatetime) = '10/29/2017') t2
      INNER JOIN 
      table t1 ON t1.customer = t2.customer
      AND t1.date2 = t2.date2
     )t3
where rownum = 1;

如果我理解正确,那么我将只使用qualify row语句,而不是按逻辑分组:

尝试下面的代码,告诉我这是否是您所需要的-我告诉它要做的是,每个客户ID只返回一行…但是,我们根据日期按升序排序来选择行-但是,我不清楚你所说的两个日期的重要性是什么意思,所以我可能在这里完全偏离了基准……你能举一个输入和期望输出的例子吗

选择t1.customer、t1.weights、t1.date1、t1.date2 从…起 挑选* 从桌子上 其中Castdate2为smalldatetime='10/29/2017' t2 内部联接表t1 在t1.customer=t2.customer上 t1.date2=t2.date2 按t1限定行数超额分配。按日期2,日期1=1确定客户订单
客户订购

你想要什么还不清楚。学习如何提问。数据结构?样本输入?样本输出?您的查询出了什么问题?我想,这是我需要的,但是对于t-sql。我尝试通过在select语句中添加t1.customer order by t1.date1、t1.date2的行数多部分来进行相应的调整,但这不仅仅输出最新的date1,而是列出它们所有。如果t-sql中没有QUIRITE语句,很抱歉以前从未使用过t-sql,只输出Teradata,您可以将该行num表达式作为附加字段,然后筛选表达式等于1的数据。Cus这样做的目的是基于partitiom和order逻辑为行创建一个编号的订单,基本上尝试将其添加到select部分:按t1进行行数超额分配。按t1.date1进行客户订单,按t1.date2作为rownu,并添加一个where子句,其中说明where rownum=1这就是我所想的,但是select子句最后处理,至少看起来是这样的,所以它会提示我一个未知的列名“rownum”