1

3 つのテーブルの詳細列が常に更新されています。ID が 3 つのテーブルから一致する指定された日時の間の最新の lastUpdateTime を取得したいと思います。

tblClient
ID,     AddressDetail, lastUpdateTime
789     Address     '2013-09-27 00:00:00:000'
789     Address     '2013-09-23 00:00:00:000'
897     Address     '2013-09-22 00:00:00:000'
354     Address     '2013-09-28 00:00:00:000'

tblOrder
ID,     OrdersDetail, lastUpdateTime
789     Order       '2013-09-26 00:00:00:000'
897     Order       '2013-09-30 00:00:00:000'
897     Order       '2013-09-27 00:00:00:000'
354     Order       '2013-09-30 00:00:00:000'

tblAccount
ID,     AccountDetail, lastUpdateTime
789     Detail      '2013-09-23 00:00:00:000'
897     Detail      '2013-09-25 00:00:00:000'
354     Detail      '2013-09-28 00:00:00:000'

--これではうまくいきません

SELECT a.ID,a.AccountDetail,max(A.lastUpdateTime)   
From tblClient A
left join tblOrder B
on A.ID = B.ID
left join tblAccount C
on C.ID = A.ID 
where A.LastUpdateTime between '2013-09-20 00:00:00:000' and '2013-09-30 00:00:00:000'
4

1 に答える 1

0

UNIONではなく aを使用しJOIN、結果を並べ替えてから、各 ID の最初の行を取得します。

SELECT ID, detail, LastUpdateTime
FROM (
 SELECT ID, detail, LastUpdateTime,
  ROW_NUMBER() OVER (PARTITION BY ID ORDER BY LastUpdateTime desc) rownum
 FROM (
  SELECT ID, AddressDetail as detail, lastUpdateTime
  From tblClient
  WHERE LastUpdateTime between '2013-09-20 00:00:00:000' and '2013-09-30 00:00:00:000'
 UNION
  SELECT ID, orderDetail, lastUpdateTime
  From tblOrder
  WHERE LastUpdateTime between '2013-09-20 00:00:00:000' and '2013-09-30 00:00:00:000'
 UNION
  SELECT ID, AccountDetail, lastUpdateTime
  From tblAccount
  WHERE LastUpdateTime between '2013-09-20 00:00:00:000' and '2013-09-30 00:00:00:000'
 ) x
) y
WHERE rownum = 1

SQLFiddleを参照してください

これには、最新の行の詳細列も返されるという利点もあります。

于 2013-09-24T01:18:28.767 に答える