2011-11-21 88 views
1

我有這樣的查詢:從查詢結果中選擇?

SELECT Weighings.Member, MIN(Sessions.DateTime) AS FirstDate, MAX(Sessions.DateTime) AS LastDate 
FROM Weighings AS Weighings INNER JOIN 
    Sessions ON Sessions.SessionGUID = Weighings.Session 
WHERE  (Sessions.DateTime >= '01/01/2011') 
GROUP BY Weighings.Member 
ORDER BY Weighings.Member 

它返回:

Member | FirstDate | LastDate 
Blah | 01/01/11 | 06/07/11 
Blah2 | 02/03/11 | 05/07/11 

我需要得到一個細胞Weight_kg的值表Weighings的返回值FirstDateLastDate給結果像這樣:

Member | FirstWeight | LastWeight 
Blah | 150Kg  | 60KG 
Blah2 | 70Kg  | 72KG 

我嘗試了所有事物的組合,噸不能解決,任何想法?

編輯

表:

Sessions 
______________________ 
SessionGUID | DateTime 
---------------------- 
12432524325 | 01/01/11 
12432524324 | 01/08/11 
12432524323 | 01/15/11 
34257473563 | 03/05/11 
43634574545 | 06/07/11 

Weighings 
_____________________________________ 
Member  | Session  | Weight_kg 
------------------------------------- 
vffd8fdg87f | 12432524325 | 150 
vffd8fdg87f | 12432524324 | 120 
vffd8fdg87f | 12432524323 | 110 
ddffv89sdv8 | 34257473563 | 124 
32878vfdsv8 | 43634574545 | 75 
+2

你可以添加一些示例行表模式? –

回答

5
;with C as 
(
    select W.Member, 
     W.Weight_kg, 
     row_number() over(partition by W.Member order by S.datetime desc) as rnLast, 
     row_number() over(partition by W.Member order by S.datetime asc) as rnFirst 
    from Weighings as W 
    inner join Sessions as S 
     on S.sessionguid = W.Session and 
     S.DateTime >= '20110101' 
) 
select CF.Member, 
     CF.Weight_kg as FirstWeight, 
     CL.Weight_kg as LastWeigth 
from C as CF 
    inner join C as CL 
    on CF.Member = CL.Member 
where CF.rnFirst = 1 and 
     CL.rnLast = 1 

請嘗試在這裏:http://data.stackexchange.com/stackoverflow/q/118518/

+0

優秀的,你是一個巫師! –

-1

你有兩種可能性。

如果你想重新使用第一選擇更多的時間,我會建議sreate臨時表

CREATE TEMPORARY TABLE `tmpTable` AS SELECT /*the first select*/ ; 

/*and then*/ 

SELECT * FROM `tmpTable` /*the second select from the first select*/ 

如果您需要先選擇只有一次

SELECT first.* 
FROM (SELECT /*the first select*/) AS first 
+0

你不在這裏創建一個'Temporary'表。 –

2

可以使用RANK ..OVER語句(僅適用於SQL 2K5 +)

select fw.Member, st.Weight, en.Weight 
from 
(
    select Member, Weight, RANK() OVER(PARTITION BY Member ORDER BY Weight) rnk 
    from Weighings 
) st 
inner join 
(
    select Member, Weight, RANK() OVER(PARTITION BY Member ORDER BY WeightDESC) rnk 
    from Weighings 
) en on en.Member= st.Member and st.rnk = 1 and en.rnk = 1