Sql server sql server的最大日期

Sql server sql server的最大日期,sql-server,Sql Server,我有一个包含数据的表,我正在尝试查找已验证的最大日期 Create table staging(ID varchar(5) not null, Name varchar(200) not null, dateverified datetime not null,dateinserted datetime not null) ID,Name,DateVerified,DateInserted 42851775,384,2014-05-24 08:48:20.000,2014-05-28 14:2

我有一个包含数据的表,我正在尝试查找已验证的最大日期

Create table staging(ID varchar(5) not null, Name varchar(200) not null, dateverified datetime not null,dateinserted datetime not null)
ID,Name,DateVerified,DateInserted
42851775,384,2014-05-24 08:48:20.000,2014-05-28 14:28:10.000
42851775,384,2014-05-28 13:13:07.000,2014-05-28 14:36:12.000
42851775,a1d,2014-05-28 09:17:22.000,2014-05-28 14:36:12.000
42851775,a1d,2014-05-28 09:17:22.000,2014-05-28 14:28:10.000
42851775,a1d,2014-05-28 09:17:22.000,2014-05-28 14:29:08.000
42851775,bc5,2014-05-28 09:17:21.000,2014-05-28 14:29:08.000
42851775,bc5,2014-05-28 09:17:21.000,2014-05-28 14:28:10.000
42851775,bc5,2014-05-28 09:17:21.000,2014-05-28 14:36:12.000
我想为每个keyid显示max dateverified,即

42851775,384,2014-05-28 13:13:07.000,2014-05-28 14:36:12.000
42851775,a1d,2014-05-28 09:17:22.000,2014-05-28 14:36:12.000
42851775,bc5,2014-05-28 09:17:21.000,2014-05-28 14:29:08.000

 SELECT i.[ID],i.name,i.dateinserted,r.maxdate
    FROM (select id,name,max(dateverified) as maxdate from 
   [dbo].[staging] where id=42851775 group by id,name) r 
  inner join 
 [dbo].[staging] i 
  on r.id=i.id and r.jobpostingurl=i.jobpostingurl and r.maxdate=i.dateverified
   group by i.id,i.jobpostingurl,r.maxdate
我得到一个错误,dateinserted无效,因为它不包含在GROUPBY子句中。但如果我把它添加到GROUPBY子句中,我会得到所有8条记录。如何处理

谢谢 R

如果需要其他信息,请将其连接到另一个表,例如:

SELECT
     b.KeyID,
     a.dateinserted,
     b.TheDate
FROM YourTable a
INNER JOIN
(
    SELECT
        KeyID,
        MAX(yourDate) AS TheDate
    FROM 
        Staging
    GROUP BY
        KeyID
) b
ON
b.KeyID = a.KeyID
如果需要其他信息,请将其连接到另一个表,例如:

SELECT
     b.KeyID,
     a.dateinserted,
     b.TheDate
FROM YourTable a
INNER JOIN
(
    SELECT
        KeyID,
        MAX(yourDate) AS TheDate
    FROM 
        Staging
    GROUP BY
        KeyID
) b
ON
b.KeyID = a.KeyID

如果需要插入日期,可以使用cte并将其连接回原始表:

WITH    cte
          AS ( SELECT   [ID] ,
                        name ,
                        MAX(dateverified) AS dateverified
               FROM     [dbo].[staging]
               GROUP BY ID ,
                        name
             )
    SELECT  cte.[ID] ,
            cte.NAME ,
            cte.dateverified ,
            s.Dateinserted
    FROM    cte
            INNER JOIN dbo.staging s ON cte.[ID] = s.[ID]
                                        AND cte.NAME = s.NAME
                                        AND cte.dateverified = s.dateverified

如果需要插入日期,可以使用cte并将其连接回原始表:

WITH    cte
          AS ( SELECT   [ID] ,
                        name ,
                        MAX(dateverified) AS dateverified
               FROM     [dbo].[staging]
               GROUP BY ID ,
                        name
             )
    SELECT  cte.[ID] ,
            cte.NAME ,
            cte.dateverified ,
            s.Dateinserted
    FROM    cte
            INNER JOIN dbo.staging s ON cte.[ID] = s.[ID]
                                        AND cte.NAME = s.NAME
                                        AND cte.dateverified = s.dateverified

你误用了小组。按尚未聚合的项目分组。例如,一个ID。您误用了group by。按尚未聚合的项目分组。例如,ID。如何将cte.[ID]、cte.NAME、cte.dateverified、s.Dateinserted插入到临时表中?我得到“列名称或提供值的数量与表定义不匹配”错误。创建表#temp([ID][varchar](10)不为空,name[varchar](200)不为空,[DateInserted][datetime]不为空,[DateVerified][datetime]不为空)如果要将数据插入临时表中,为什么不在问题中包括这一点?您知道带cte的insert的语法吗?如何将cte.[ID]、cte.NAME、cte.dateverified、s.Dateinserted插入临时表?我得到“列名称或提供值的数量与表定义不匹配”错误。创建表#temp([ID][varchar](10)不为空,name[varchar](200)不为空,[DateInserted][datetime]不为空,[DateVerified][datetime]不为空)如果要将数据插入临时表中,为什么不在问题中包括这一点?您知道带cte的insert的语法吗?