2

日付と時刻でデータを並べ替えるクエリを更新して作成し、最新のレコードを見つけてから、レコード内の別のフィールドを更新して、そのようにマークを付けようとしています。

時間とデータは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

これにより、時間と日付で並べ替えられたデータが生成されますが、2つのエントリがある日付を除いて、検出されたすべてのフィールドが更新されます。次に、最新のレコードのみを更新します。

私は単一のレコードでテストしています-このキューアで次の結果を与える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 に答える