PDA

View Full Version : Chút thắc mắc về CSDL



shuichi_akai7589
09-07-2011, 10:47
Em có bảng: Test(Id, Ten,Time,Bid_id)
Với Tên: tên người chơi.
Time: thời gian người đó Bid
Bid_id: id SP mà người đó bit

Một người có thể Bit nhiều SP và một SP bid nhiều lần.
Em muốn đưa ra danh sách :Theo Bid_id, sẽ chỉ hiện người chơi Bid cuối cùng theo thời gian.
Bác nào biết cách nào giúp em với. Thanks.

[=========> Bổ sung bài viết <=========]

Bổ xung thêm: danh sách hiện ra chỉ cẩn tên người chơi với Bid_id thôi.

amino
09-07-2011, 11:05
sử dụng top 1 và order by time desc đi bạn.

shuichi_akai7589
09-07-2011, 11:10
sử dụng top 1 và order by time desc đi bạn.

Bạn có thể nói rõ hơn không? Mình muốn show ra 1 bảng với danh sách tất cả các SP, mỗi SP ấy chỉ hiện ra người Bit cuối cùng+ Tên người bid.
Lưu ý là một người sẽ Bid nhiều SP, và 1 SP người đó cũng sẽ bid nhiều lần.

chip07
09-07-2011, 14:24
-- cach 1:
SELECT Bid_id, Ten
FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY Bid_id ORDER BY [Time] DESC) STT, Bid_id, Ten
FROM Test
) rs
WHERE STT = 1

-- cach 2:
SELECT t.Bid_id, t.Ten
FROM
(
SELECT Bid_id, MAX([Time]) [Time]
FROM Test
GROUP BY Bid_id
) rs
INNER JOIN Test t
ON (rs.Bid_id = t.Bid_id) AND (rs.[Time] = t.[Time])

-- cach 3:
SELECT t.Bid_id, (SELECT TOP 1 st.Ten FROM Test st WHERE st.Bid_id = t.Bid_id ORDER BY t.[Time] DESC) Ten
FROM Test t