2

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

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

所以这是我到目前为止所拥有的,

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

我不知道如何从我所在的地方到我需要去的地方,所以任何帮助将不胜感激。

4

2 回答 2

2

假设您正在使用SQL Server 2005+因为[]我看到了)

;WITH latestResult
AS
(
    SELECT Gully_ID, MaxDate, MaxTime,
            ROW_NUMBER() OVER (PARTITION BY Gully_ID
                                ORDER BY MaxDate DESC, MaxTime DESC) RN
    FROM tableName
)
SELECT Gully_ID, MaxDate, MaxTime
FROM latestResult
WHERE RN = 1
于 2013-01-11T15:35:35.760 回答
0

最终使用了以下内容,感谢所有帮助我的人。

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
)
于 2013-01-17T11:19:26.217 回答