Sql 选择i.ITEM\u ID、i.ITEM\u NAME、i.START\u VALUE、c.MAX\u BID\u NAME、c.MAX\u BID\u VALUE、c.BID\u TIME 来自#项目一 在c.ITEM\u ID=i.ITEM\u ID上
选择i.ITEM\u ID、i.ITEM\u NAME、i.START\u VALUE、c.MAX\u BID\u NAME、c.MAX\u BID\u VALUE、c.BID\u TIME 来自#项目一 在c.ITEM\u ID=i.ITEM\u ID上左连接最终cSql 选择i.ITEM\u ID、i.ITEM\u NAME、i.START\u VALUE、c.MAX\u BID\u NAME、c.MAX\u BID\u VALUE、c.BID\u TIME 来自#项目一 在c.ITEM\u ID=i.ITEM\u ID上,sql,performance,compare,db2-luw,Sql,Performance,Compare,Db2 Luw,选择i.ITEM\u ID、i.ITEM\u NAME、i.START\u VALUE、c.MAX\u BID\u NAME、c.MAX\u BID\u VALUE、c.BID\u TIME 来自#项目一 在c.ITEM\u ID=i.ITEM\u ID上左连接最终c 我需要找到拍卖结束日期前的最高出价。你似乎没有考虑这个问题?我错过了。我修正了它,假设拍卖结束是最后一天。拍卖结束日期不是最后一天。拍卖结束日期后的出价不应包括在内。@user3155036。这使得where条款变得更加复杂。我编
我需要找到拍卖结束日期前的最高出价。你似乎没有考虑这个问题?我错过了。我修正了它,假设拍卖结束是最后一天。拍卖结束日期不是最后一天。拍卖结束日期后的出价不应包括在内。@user3155036。这使得
where
条款变得更加复杂。我编辑了我的答案以考虑拍卖结束日期。希望这有帮助。我需要找到拍卖结束日期前的最高出价。你似乎没有考虑这个问题?我错过了。我修正了它,假设拍卖结束是最后一天。拍卖结束日期不是最后一天。拍卖结束日期后的出价不应包括在内。@user3155036。这使得where
条款变得更加复杂。我编辑了我的答案以考虑拍卖结束日期。希望对你有所帮助。有些出价是在拍卖结束日期之后列出的。但仅应报告各组在拍卖结束前的出价。此处列出的出价在拍卖结束日期后。但仅应报告各组在拍卖结束前的出价
ITEM_ID | ITEM_NAME | START_VALUE
A1324 | item1 | 113
B4534 | item3 | 50
A3453 | item7 | 35
A7654 | item2 | 48
ITEM_ID | BIDDER_NAME | BID_VALUE | BID_TIME
A7654 | Jessica | 53 | 2016-02-02 14:28:43
B4534 | John | 69 | 2016-01-03 08:03:06
B4534 | Annie | 63 | 2016-01-02 15:23:27
B4534 | Tim | 65 | 2016-01-01 18:15:02
B4534 | AuctionEnd | 50 | 2016-01-02 19:45:34
A7654 | Mark | 52 | 2016-02-02 16:51:12
ITEM_ID|ITEM_NAME|START_VALUE|MAX_BIDDER_NAME|MAX_BID_VALUE|BID_TIME
A1324 | item1 | 113 |null |null |0
B4534 | item3 | 50 |Tim |65 |2016-01-01 18:15:02
A3453 | item7 | 35 |null |null |0
A7654 | item2 | 48 |Jessica |53 |2016-02-02 14:28:43
select i.*, b.*
from items i left join
(select b.item_id, max(b.bid_time) as maxbt
from bids b
where b.bid_time < (select max(b.bid_time)
from bids b2
where b2.bidder_name = 'AuctionEnd' and
b2.item_id = b.item_id
)
group by b.item_id
) bb
on i.item_id = bb.item_id left join
bids b
on b.item_item = i.item_id and b.bid_time = b.maxbt;
CREATE TABLE #ITEMS (ITEM_ID varchar(10), ITEM_NAME varchar(10), START_VALUE int)
INSERT INTO #ITEMS
VALUES
('A1324','item1',113),
('B4534','item3',50),
('A3453','item7',35),
('A7654','item2',48)
CREATE TABLE #BIDS (ITEM_ID varchar(10), BIDDER_NAME varchar(50), BID_VALUE int, BID_TIME datetime)
INSERT INTO #BIDS
VALUES
('A7654','Jessica',53,'2016-02-02 14:28:43'),
('B4534','John',69,'2016-01-03 08:03:06'),
('B4534','Annie',63,'2016-01-02 15:23:27'),
('B4534','Tim',65,'2016-01-01 18:15:02'),
('B4534','AuctionEnd',50,'2016-01-02 19:45:34'),
('A7654','Mark',52,'2016-02-02 16:51:12')
;WITH cteEndTime as
(
Select
ITEM_ID,
CASE WHEN BIDDER_NAME = 'AuctionEnd' THEN BID_TIME ELSE NULL END as 'END_BID_TIME'
From #BIDS
Where BIDDER_NAME = 'AuctionEnd'
)
,cteValidBIDS as
(Select * From (
Select bd.ITEM_ID, bd.BIDDER_NAME, bd.BID_VALUE, bd.BID_TIME,
ROW_NUMBER() over (partition by bd.ITEM_ID order by BID_TIME) as 'brnk',
c.END_BID_TIME
FROM #BIDS bd
LEFT JOIN cteEndTime c on c.ITEM_ID = bd.ITEM_ID
) a
Where a.BID_TIME < ISNULL(a.END_BID_TIME, '2200-01-01')
)
,finalCTE as (
Select ITEM_ID, MAX_BID_NAME, MAX_BID_VALUE, BID_TIME From (
Select
ROW_NUMBER() over (partition by c.ITEM_ID order by c.BID_VALUE desc) as 'brnk'
,c.ITEM_ID
,c.BIDDER_NAME as 'MAX_BID_NAME'
,c.BID_VALUE as 'MAX_BID_VALUE'
,c.BID_TIME
From cteValidBIDS c
) a
Where a.brnk = 1
)
Select i.ITEM_ID, i.ITEM_NAME, i.START_VALUE, c.MAX_BID_NAME, c.MAX_BID_VALUE, c.BID_TIME
From #ITEMS i
LEFT JOIN finalCTE c on c.ITEM_ID = i.ITEM_ID