1

2 つの列 (startTime、endTime) を持つテーブルがあります。これらは dataTime タイプのものです。

このテーブルに行を挿入すると、このテーブルの以前のデータを次のように更新します。

update endTime in the row which has most recent (max) startTime

私は(別のスレッドが教えてくれるように)次のように働きました:

BEGIN
    ;with T as(
    select *, ROW_NUMBER() over (order by startTime desc) RNum
    from Order_Status
    where OrderID=@orderID
    )
    update top(1) T set endTime=@startTime
    END

しかし、最新ではなく小さな(最も古い)ものを更新しているようです。

右は何ですか

4

2 に答える 2

3

メソッドからの順序付けを実際に適用するのではなくROW_NUMBER、次のようなものが必要です。

BEGIN
 ;with T as(
    select *, ROW_NUMBER() over (order by startTime desc) RNum
    from Order_Status
    where OrderID=@orderID
  )
  update T set endTime=@startTime
  from (select top 1 * from T order by RNum ASC) T
END

または、もう少しきちんとするために、これは機能するはずです(テストされていません):

BEGIN
 ;with T as(
    select top 1 *
    from Order_Status
    where OrderID=@orderID
    order by startTime desc
  )
  update T set endTime=@startTime
END
于 2013-05-14T08:02:34.120 に答える
0
UPDATE Order_Status
SET endTime=@startTime
WHERE startTime = (SELECT MAX(StartTime) FROM Order_Status where OrderID=@orderID)
AND OrderID=@orderID
于 2013-05-14T08:18:16.693 に答える