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
)