我在编写查询时遇到问题。
我想选择分组的每组行的第一行
我的桌子是Transactions:
Transactions
userID | Date | StoreID --------------------------- 1 | 8-9-2013 | 10 1 | 9-9-2013 | 10 1 | 10-9-2013| 20 2 | 7-9-2013 | 30 2 | 8-9-2013 | 10 2 | 9-9-2013 | 20 1 | 11-9-2013| 10 2 | 10-9-2013| 20
我尝试使用以下SQL语句:
Select tr.userID , Min(tr.TransactionDate) FirstDate From Transactions tr Group By tr.userID
我得到以下输出:
userID | Date ------------------ 1 | 8-9-2013 2 | 7-9-2013
但是我Store ID在每笔第一笔交易中都需要。
Store ID
我需要像那样
userID | Date | StoreID ------------------------- 1 | 8-9-2013 | 10 2 | 7-9-2013 | 30
请任何人可以帮助我
SQL小提琴
MS SQL Server 2008架构设置 :
CREATE TABLE Transactions ([userID] int, [Date] datetime, [StoreID] int) ; INSERT INTO Transactions ([userID], [Date], [StoreID]) VALUES (1, '2013-08-09 00:00:00', 10), (1, '2013-09-09 00:00:00', 10), (1, '2013-10-09 00:00:00', 20), (2, '2013-07-09 00:00:00', 30), (2, '2013-08-09 00:00:00', 10), (2, '2013-09-09 00:00:00', 20), (1, '2013-11-09 00:00:00', 10), (2, '2013-10-09 00:00:00', 20) ;
查询1 :
SELECT tr.userID , Min(tr.Date) FirstDate , tr2.storeid FROM Transactions tr inner join Transactions tr2 on tr.userid = tr2.userid and tr2.date = (select top 1 date from transactions t where t.userid = tr2.userid order by date asc) GROUP BY tr.userID, tr2.storeid
结果 :
| USERID | FIRSTDATE | STOREID | |--------|-------------------------------|---------| | 1 | August, 09 2013 00:00:00+0000 | 10 | | 2 | July, 09 2013 00:00:00+0000 | 30 |