2011-12-15 133 views
2

我需要一個SQL查詢的一些幫助: 的數據是這樣的:SQL子查詢GROUP BY

ID (int, PK) 
REF (int, FK) 
UserName (varchar) 
TransDate (DateTime) 
Status (int) 

1, 1001, joebloggs, 2011-12-15 13:50:01, 1 
2, 1001, johnsmith, 2011-12-15 14:35:01, 1 

,所以我需要返回以下的REF和用戶名; MIN(TransDate),並在那裏的地位= 1

,所以我做到以下幾點:

SELECT REF, UserName, MIN(TransDate) 
    FROM   dbo.MyTable 
    WHERE  (Status = 1) 
    and REF = 1001 
    GROUP BY REF, UserName 

顯然這是錯誤的,因爲它返回我:

1001, joebloggs, 2011-12-15 13:50:01 
1001, johnsmith, 2011-12-15 14:35:01 

不過,我只是需要返回min transDate的用戶名。所以:

1001, joebloggs, 2011-12-15 13:50:01 

任何人都可以幫助我please..its駕駛我瘋了。

謝謝(從我的理智)

回答

3
SELECT REF, UserName, TransDate 
FROM dbo.MyTable  
WHERE ID = (
    SELECT TOP 1 ID 
    FROM dbo.MyTable 
    WHERE Status = 1 AND REF = 1001 
    ORDER BY TransDate ASC 
) 

編輯:

或者,如果你需要的結果對每個REF,而不是特定REF,你可以試試這個:

SELECT mt.REF, mt.UserName, mt.TransDate 
FROM 
    dbo.MyTable mt JOIN (
     SELECT 
      REF, 
      MIN(TransDate) AS MinTransDate 
     FROM dbo.MyTable 
     WHERE Status = 1 
     GROUP BY REF 
    ) MinResult mr ON mr.REF = mt.REF AND mr.MinTransDate = mt.TransDate 
2

這樣做怎麼樣?

SELECT TOP(1) REF, UserName, TransDate 
FROM dbo.MyTable 
WHERE (Status = 1) 
and REF = 1001 
ORDER BY TransDate 
-1

添加order byLimit 1

+0

這是SQL服務器,MySQL的沒有。 – 2011-12-15 22:56:24

+0

對不起,沒有看到'tsql' – paulslater19 2011-12-15 22:58:27

0

嘗試

SELECT REF, UserName, MIN(TransDate) 
FROM   dbo.MyTable 
WHERE  (Status = 1) 
and REF = 1001 
and transdate=(select min(transdate) from dbo.MyTable) 
GROUP BY REF, UserName; 
0

幾乎在那裏。使用子查詢來定位min_date,然後返回到原始表以查找其餘數據。

select * from dbo.mytable 
inner join (select min(transdate) 
FROM   dbo.MyTable 
WHERE  (Status = 1) 
and REF = 1001) a 
on mytable.transdate = a.transdate 

該解決方案將返回多行,如果你有多個記錄與同一TRANS_DATE