2016-10-13 57 views
0

這是我的情況:SELECT MAX日期從多個日期

我有2個表SKU & Disco_Dates

在這兩個表中都有類似的字段。

SKU.[MFG_PART_NUMBER] = Disco_Dates.[MATERIAL] 

我需要知道可用的最大DATE_UPDATE每個MFG_PART_NUMBER

DISCO_DATE TABLE 

+-------------+-----------------------+-----------------------+ 
| MATERIAL |DISCO_DATE    | DATE_UPDATE   | 
+-------------+-----------------------+-----------------------+ 
|T6C25AW#ABC |NULL     |2016-09-14 11:15:03.587| 
|T6C25AW#ABC |2016-10-28 00:00:00.000|2016-09-21 13:45:03.591| 
|T6C25AW#ABC |2016-10-31 00:00:00.000|2016-09-30 12:38:08.990| 
+-------------+-----------------------+-----------------------+ 

SKU TABLE 

+---------------+ 
|MFG_PART_NUMBER| 
+---------------+ 
|T6C25AW#ABC | 
|G2F32UC#ABC | 
+---------------+ 

SQL查詢

SELECT 
t1.[MFG_PART_NUMBER] 
,t2.[DISCO_DATE] 
,MAX (t2.[DATE_UPDATE]) as DATE_UPDATE 

FROM Test.dbo.SKU t1 

LEFT JOIN Test.dbo.Tbl_Disco_Dates t2 
ON [MFG_PART_NUMBER] = [MATERIAL] 

WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC' 

group by 
    t1.[MFG_PART_NUMBER] 
,t2.[DISCO_DATE] 

我現在的結果是給了我所有的3行。

這就是我需要的。

+----------------+-----------------------+-----------------------+ 
|MFG_PART_NUMBER |DISCO_DATE    | DATE_UPDATE   | 
+----------------+-----------------------+-----------------------+ 
|T6C25AW#ABC  |2016-10-31 00:00:00.000|2016-09-30 12:38:08.990| 
+----------------+-----------------------+-----------------------+ 

在此先感謝。

回答

2

試試這個:

SELECT 
t1.[MFG_PART_NUMBER] 
,t2.[DISCO_DATE] 
,t2.[DATE_UPDATE] as DATE_UPDATE 

FROM Test.dbo.SKU t1 

LEFT JOIN Test.dbo.Tbl_Disco_Dates t2 
ON [MFG_PART_NUMBER] = [MATERIAL] 

WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC' 
     AND t2.[DATE_UPDATE] = (SELECT MAX(t2.[DATE_UPDATE] FROM Test.dbo.Tbl_Disco_Dates t2) 
+0

非常接近理想的結果。但它使我找到了答案 選擇 T1。[MFG_PART_NUMBER] ,T2。[DISCO_DATE] ,T2。[DATE_UPDATE]作爲DATE_UPDATE FROM Test.dbo.SKU T1 LEFT JOIN Test.dbo。 Tbl_Disco_Dates T2 ON [MFG_PART_NUMBER] = [材料] 其中T1。[MFG_PART_NUMBER] = 'T6C25AW#ABC' 和T2。[DATE_UPDATE] =(SELECT MAX(T2 [DATE_UPDATE])。FROM Test.dbo.Tbl_Disco_Dates T2 ) group by t1。[MFG_PART_NUMBER] ,t2。[DISCO_DATE] ,t2。[DATE_UPDATE] –

+0

哦,是的,我忘了MAX必須在SELECT語句中 –

+2

如果你這樣做,它仍然需要羣組嗎? – Kris

1

豈不簡單GROUP BY查詢工作:

SELECT MATERIAL, 
     MAX(DISCO_DATE) AS DISCO_DATE, 
     MAX(DATE_UPDATE) AS DATE_UPDATE 
FROM Test.dbo.Tbl_Disco_Dates 
GROUP BY MATERIAL 
2
declare @maxdate datetime 
select @maxdate = max(t2.[DATE_UPDATE]) FROM Test.dbo.SKU 
select * from (SELECT 
    t1.[MFG_PART_NUMBER] 
,t2.[DISCO_DATE] 
    , DATE_UPDATE 

    FROM Test.dbo.SKU where DATE_UPDATE= @maxdate) t1 
    LEFT JOIN Test.dbo.Tbl_Disco_Dates t2 
    ON t1.[MFG_PART_NUMBER] = t2.[MATERIAL] 

    WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC' 

    group by 
t1.[MFG_PART_NUMBER] 
,t2.[DISCO_DATE]