私のビューテーブルは次のようなものです:
position price orderid buylog otherlog
1 15 100 08:00 08:01
2 15 100 08:00 08:02
2 15 100 08:00 08:05
2 15 100 08:00 08:02
2 15 101 08:10 08:15
2 15 101 08:10 08:12
2 15 102 08:20 08:25
2 15 103 08:30 08:31
2 15 103 08:30 08:32
2 15 103 08:30 08:33
期待される結果:
position price orderid buylog otherlog
1 15 100 08:00 08:01
2 15 100 08:00 08:05
2 15 101 08:10 08:15
2 15 102 08:20 08:25
2 15 103 08:30 08:33
これは、私が推測するためのほんの一部のステップです。私が実際に望んでいるのは次のとおりです。
position price
1 15
2 60
そのため、ポジションごとの合計支払いの概要が必要です。
しかし今のところ、私が必要としているのは、すべての位置と順序 ID について、otherlog エントリが最も高い行だけが欲しいということです。
これで、buylog-times よりも低いログ時間が他にもありましたが、単にbuylog < otherlog
.
しかし、今では、すべての orderid-group から最高の otherlog だけを正確に表示する方法がわかりません。で試しましmax(otherlog)
たが、それでも最初のテーブルが出力されます。
これは 3 つのテーブルを結合した後のビューであり、まったく同じクエリで期待される結果を得たいと考えています。
クエリは次のようになります。
select position,price,orderid,buylog,otherlog
from table1 inner join table2 on t1.userid=t2.userid
inner join table3 on t2.id=t2.id
where (some conditions to narrow down the results)
私はms sqlサーバー2012を使用しています。
//編集
クエリ:
Use [dbname]
go
with cte
as ( select olt.position,
ot.price,
ot.orderid,
ot.buylog = min(ot.buylog) over (partition by olt.position,ot.orderid),
olt.otherlog = max(olt.otherlog) over (partition by olt.position,ot.orderid),
rn=row_number() over(partition by olt.position, order by olt.position)
from ordertable as ot inner join anothertable as at
on ordertable.userid=anothertable.userid
inner join otherlogtable as olt on anothertable.id=otherlogtable.sessionlogid
)
select
olt.position,
ot.price,
ot.orderid,
ot.buylog,
olt.otherlog
from
cte
where
rn=1