SQL查询按时间和日期对数据排序,然后仅选择最新记录

SQL查询按时间和日期对数据排序,然后仅选择最新记录,sql,Sql,我正在尝试更新创建一个查询,该查询将按日期和时间对数据进行排序,找到最新的记录,然后更新记录中的另一个字段,将其标记为最新的记录 让我的生活更艰难时间和数据是两个独立的领域,时间也是一个字符串 这就是我到目前为止所做的 UPDATE server.ESCC_HWAY_ASSETS_GULLIES_N set CURRENT_REC = 'Y' From server.ESCC_HWAY_ASSETS_GULLIES_N A inner join ( SELECT GULLY_ID, Ma

我正在尝试更新创建一个查询,该查询将按日期和时间对数据进行排序,找到最新的记录,然后更新记录中的另一个字段,将其标记为最新的记录

让我的生活更艰难时间和数据是两个独立的领域,时间也是一个字符串

这就是我到目前为止所做的

UPDATE server.ESCC_HWAY_ASSETS_GULLIES_N 
set CURRENT_REC = 'Y' 
From server.ESCC_HWAY_ASSETS_GULLIES_N A 
inner join ( 
SELECT GULLY_ID, Max([DATE]) AS MaxDate, MAX([TIME]) AS MaxTime 
FROM server.ESCC_HWAY_ASSETS_GULLIES_N B
GROUP BY GULLY_ID, [DATE] ) B 
on A.GULLY_ID = B.GULLY_ID and A.[DATE] = B.MaxDate and A.[TIME] = B.MaxTime
这会产生按时间和日期排序的数据,但它会更新找到的所有字段,除了有两个条目的日期字段。然后它只更新最新的记录

我正在测试一条记录——B47605,它在这个队列器上给出了以下结果

SELECT GULLY_ID, Max([DATE]) AS MaxDate, MAX([TIME]) AS MaxTime 
FROM ESMAPADMIN.ESCC_HWAY_ASSETS_GULLIES_N B
WHERE GULLY_ID = 'B47605'
GROUP BY GULLY_ID, [DATE]

Gully_ID     MaxDate                MaxTime
B47605  2008-03-12 00:00:00.000 09:02:29
B47605  2008-09-19 00:00:00.000 09:51:14
B47605  2009-02-16 00:00:00.000 11:18:28
B47605  2009-08-21 00:00:00.000 12:34:45
B47605  2010-03-16 00:00:00.000 09:22:26
B47605  2010-08-25 00:00:00.000 11:19:55
B47605  2011-03-07 00:00:00.000 12:19:56
B47605  2012-05-02 00:00:00.000 20:57:54
我希望的结果是只返回最新的记录-

Gully_ID     MaxDate                MaxTime
B47605  2012-05-02 00:00:00.000 20:57:54

我不知道如何从我现在的位置到我需要的位置,因此非常感谢您的帮助。

假设您使用的是
SQL Server 2005+
(因为我看到了
[]


    • 最后使用了以下内容,多亏了这些帮助

      UPDATE ....
      set CURRENT_REC = 'Y' 
      where [objectID] in
      (
      select [objectID] from
          (
          SELECT [objectID],[GULLY_ID], [date], [time],
          ROW_NUMBER() over (partition by gully_id order by date desc, time desc) rown
          FROM ....
          ) as t
      where rown=1
      )
      

      您使用的是什么数据库。您使用的是什么风格的SQL(MSSQL、MySql、Oracle等)?哇,非常快,谢谢您的帮助。现在来试试这个,总是很好地倾斜一些东西。谢谢你输入JW,我用了你给我的东西,并对它做了一些修改。我有点忙,所以直到现在才有机会更新帖子。
      UPDATE ....
      set CURRENT_REC = 'Y' 
      where [objectID] in
      (
      select [objectID] from
          (
          SELECT [objectID],[GULLY_ID], [date], [time],
          ROW_NUMBER() over (partition by gully_id order by date desc, time desc) rown
          FROM ....
          ) as t
      where rown=1
      )