2014-05-02 84 views
1

我有一個SQL Server表SQL Server的訂購

Date   Crew 
================== 
'2010-07-01',Crew1 
'2010-07-02',Crew2 
'2010-07-03',Crew2 
'2010-07-04',Crew2 
'2010-07-05',Crew1 
'2010-07-06',Crew1 
'2010-07-07',Crew1 
'2010-07-08',Crew1 

我如何要提取的數據是這樣的

Date   Crew 
================== 
'2010-07-01',Crew1 
'2010-07-02',Crew2 
'2010-07-05',Crew1 

即以下數據按日期排序,然後按船員分組並顯示最小(日期),但注意重複Crew1

到目前爲止我所能達到的是

Date   Crew 
================== 
'2010-07-01',Crew1 
'2010-07-02',Crew2 

我如何實現我想要的?正如當我嘗試按船員和按日期排序它不會讓我!

+0

2010-07-31''和2010-08-01''的日期怎麼樣? –

+0

也許我沒有解釋得很好,如果例如一些更多的日期添加了像'2010-07-09','Crew3'和'2010-07-10','Crew1',我希望如上所述輸出加'2010-07-09','Crew3'和'2010-07-10','Crew1'。 –

回答

2

如果您需要與日期< 2014年7月31日THN使用數據

SELECT date, crew 
    FROM table1 
    WHERE date < '2010-07-31' 
    GROUP BY date, crew 
    ORDER BY date desc 

別人去下面的查詢。它會根據您的需要對數據進行排序。

SELECT date, crew 
    FROM table1 
    GROUP BY date, crew 
    ORDER BY date desc 

fiddle

0

如果我理解你的問題正確,你需要在你的表2的最小日期的記錄。請檢查我的解決方案。

如果它不符合你的要求,那麼請評論

--Simulated your table 
DECLARE @tbl TABLE 
(
    [DATE] DATETIME, 
    CREW VARCHAR(50) 
) 

--Inserted values for testing 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-01','Crew1') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-02','Crew2') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-03','Crew2') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-04','Crew2') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-05','Crew1') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-06','Crew1') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-07','Crew1') 
INSERT INTO @tbl([DATE], CREW) VALUES('2010-07-08','Crew1') 


--Your required query 
;WITH MyCTE AS 
(
    SELECT * FROM @tbl 
    WHERE [DATE] IN (
     SELECT TOP 2 [DATE] FROM @tbl 
     GROUP BY [DATE] 
     ORDER BY [DATE] ASC 
    ) 
    GROUP BY [DATE], CREW 
) 

SELECT * FROM MyCTE 
UNION ALL 
SELECT TOP 1 * FROM @tbl 
WHERE CREW = 'Crew1' 
AND [DATE] NOT IN 
(
    SELECT [DATE] FROM MyCTE 
) 

希望這有助於

+0

謝謝,但不會,這將只能得到前2 –

+0

檢查我更新的答案。它看起來不太優雅,但它應該給你想要的輸出和我現在想出的最好的 – samar

0

這應該這樣做:

SELECT date, crew 
FROM table1 
GROUP BY date, crew 
+0

不,這隻會返回一切 –

0

不是這麼簡單嗎?

SELECT 
    MIN([DATE]) as [Date] 
,CREW 
FROM Table 
GROUP BY CREW 
ORDER BY Date ASC