2014-09-18 30 views
3

我希望每個Name的min(Date)的OrderType。 所以,我想這一點:sql select min,從同一行中的不同列返回值與分組

Name Date  OrderType 
Alex 1/1/2014 Direct 
Alex 9/15/2014 Distributor 
Cindy 6/4/2014 Distributor 
John 5/8/2014 Direct 
John 2/14/2014 Distributor 

返回此:

Name Date  OrderType 
Alex 1/1/2014 Direct 
Cindy 6/4/2014 Distributor 
John 2/14/2014 Distributor 
+0

感謝格式化編輯@JChao! – 2014-09-18 20:58:19

回答

10

我們可以根據日期爲每個[Name]得到行數,選擇最最新紀錄。

SELECT [T].* 
FROM ( 
    SELECT [Name] 
     , [DATE] 
     , [OrderType] 
     , ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [Date]) AS [seq] 
    FROM [TableA] 
) AS [T] 
WHERE [T].[seq] = 1 
+1

頭腦風暴。完美解決方案謝謝你 – 2014-09-18 21:08:51

-2

試試這個

select 
a.name, 
MIN(a.date)as date, 


from dbname a i 
inner join (select name, min(date), ordertype from dbname) b on b.name=a.name and a.date=b.date 

group by a.name, b.ordertype 
+1

我沒有投票,但你的查詢將返回所有5行,因爲它是按名稱和ordertype分組的。 – SQLChao 2014-09-18 21:03:43

1

我想你需要選擇每人分鐘時間再加入回原來的表來獲得該行的類型。

假設你的表稱爲標籤,每個人只有每個日期的順序(否則,問題是不可能的),那麼這樣的:

Select t.name, t.date, t.ordertype 
From tab t, 
    (select min (i.date) date, i.name from tab i group by i.name) t2 
Where t.date = t2.date 
    And t.name = t2.name 

對不起,我的工作主要是與MySQL和Oracle沒有TSQL所以它是通用的sql語法。

0
CREATE TABLE #tmp 
(Name VARCHAR(50), orderdate DATE, OrderType VARCHAR(50)) 
INSERT #tmp (Name, orderdate, OrderType) 
VALUES ('Alex', '01/01/2014','Direct') 
INSERT #tmp 
VALUES ('Alex', '9/15/2014','Distributor') 
INSERT #tmp 
VALUES ('Cindy', '6/4/2014','Distributor') 
INSERT #tmp 
VALUES ('John', '5/8/2014','Direct') 
INSERT #tmp 
VALUES ('John', '2/14/2014','Distributor') 


; WITH CTE_RESULT AS 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ORDERDATE ASC) ROW_NO , Name, orderdate, OrderType 
    FROM #tmp 
) 

SELECT * FROM CTE_RESULT T WHERE T.ROW_NO=1 
相關問題