Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Sql Server 2008 R2_Subquery - Fatal编程技术网

Sql 如何按最近的日期分组?

Sql 如何按最近的日期分组?,sql,sql-server-2008-r2,subquery,Sql,Sql Server 2008 R2,Subquery,我有一个历史记录表,同一条记录有多行,我正在尝试获取最新(最接近今天的日期)记录。我正在尝试按最近的日期分组,但遇到了困难。请查看下面的查询并告知我 SELECT DISTINCT * FROM (SELECT etc.Complaint.Complaint_ID AS Complaint_ID FROM etc.Complaint) AS Qry1 LEFT JOIN (SELECT etc.Complaint.Complaint_ID AS Com

我有一个历史记录表,同一条记录有多行,我正在尝试获取最新(最接近今天的日期)记录。我正在尝试按最近的日期分组,但遇到了困难。请查看下面的查询并告知我

SELECT DISTINCT *
FROM
  (SELECT etc.Complaint.Complaint_ID AS Complaint_ID
     FROM etc.Complaint) AS Qry1  
     LEFT JOIN
        (SELECT etc.Complaint.Complaint_ID AS Complaint_ID,
                o.Action_User AS Resolved_User,
                o.Action_Date AS LastActionDate
           FROM etc.Complaint 
           LEFT OUTER JOIN etc.History as o 
             ON SUBSTRING(Primary_Key,15,LEN(Primary_Key) - 15) = etc.Complaint.Complaint_ID 
            AND TABLE_NAME = 'Resolution' AND o.Field_Name = 'Resolved_Ind' 
            AND New_Value = 1) AS Qry2 
       ON Qry1.Complaint_ID = Qry2.Complaint_ID
    ORDER BY Qry1.Complaint_ID, MAX(Qry2.LastActionDate) 
这种改变有用吗

    SELECT DISTINCT *
    FROM
      (SELECT etc.Complaint.Complaint_ID AS Complaint_ID FROM etc.Complaint) AS Qry1  
         LEFT JOIN
            (SELECT etc.Complaint.Complaint_ID AS Complaint_ID,
                    o.Action_User AS Resolved_User,
                    o.Action_Date AS LastActionDate
               FROM etc.Complaint 
               LEFT OUTER JOIN 
                  (
                        SELECT SUBSTRING(Primary_Key,15,LEN(Primary_Key) - 15) as hist_Complaint_ID , MAX(Action_Date) as Action_Date
                        FROM etc.History
                        WHERE Field_Name = 'Resolved_Ind' 
                        GROUP BY SUBSTRING(Primary_Key,15,LEN(Primary_Key) - 15)
                  ) as o
                 ON o.hist_Complaint_ID = etc.Complaint.Complaint_ID 
                AND TABLE_NAME = 'Resolution' AND o.Field_Name = 'Resolved_Ind' 
                AND New_Value = 1) AS Qry2 
           ON Qry1.Complaint_ID = Qry2.Complaint_ID
        ORDER BY Qry1.Complaint_ID, Qry2.LastActionDate 

您可以使用
行号
和CTE来获取它:

WITH cte AS (
    SELECT etc.Complaint.Complaint_ID AS Complaint_ID,
                    o.Action_User AS Resolved_User,
                    o.Action_Date AS LastActionDate
                    row_number() over (partition by etc.Complaint.Complaint_ID order by o.Action_Date desc) AS rn
    FROM etc.Complaint 
    LEFT OUTER JOIN etc.History as o 
        ON SUBSTRING(Primary_Key,15,LEN(Primary_Key) - 15) = etc.Complaint.Complaint_ID 
    AND TABLE_NAME = 'Resolution' AND o.Field_Name = 'Resolved_Ind' 
    AND New_Value = 1
)

SELECT * FROM cte
WHERE rn = 1

你能分享一些样本数据和你想要得到的结果吗?