2011-04-18 77 views
0

對於SQL 2000, 非常相似,我在這裏問得到一個最大的日期,如果日期是不是唯一的

Get distinct max date using SQL

但是這一次的日期是不唯一的,這樣該表pc_bsprdt_tbl

pc_bsprhd_key   pc_bsprdt_shpiadt    pc_bsprdt_prod 
21ST 99-00   2001-04-30 23:59:59.000   72608-12895 
21ST 99-00   2001-04-30 23:59:59.000   72608-12910 
AFCC990915   1999-09-01 00:00:00.000   72608-12115  
AFCC990915   1999-09-01 00:00:00.000   CHU99-01514 
AFCC990915   1999-09-01 00:00:00.000   POP99-01514 

我想回到

21ST 99-00   2001-04-30 23:59:59.000 
AFCC990915   1999-09-01 00:00:00.000 

現在,pc_bsprdt_prod是獨一無二的,所以我試過的是使用這樣的產品的最大值給我獨特性。

Select T.pc_bsprhd_key, T.pc_bsprdt_shpiadt 
From pc_bsprdt_tbl As T 
    Join (
     Select pc_bsprhd_key, Max(T1.pc_bsprdt_shpiadt) As MaxDateTime, Max(pc_bsprdt_prod) as Product 
     From pc_bsprdt_tbl As T1 
     Group By T1.pc_bsprhd_key 
     ) As Z 
    On Z.pc_bsprhd_key = T.pc_bsprhd_key 
     And Z.MaxDateTime = T.pc_bsprdt_shpiadt 
    AND Z.Product = T.pc_bsprdt_prod 

好像它的工作原理:)

有沒有辦法做到這一點雖然只是使用日期?也許在那裏的頂部1?

+1

您的示例輸出只需要2列;您的示例查詢會生成3列。這實際上是你想要的? – 2011-04-18 16:14:43

+0

啊,真的,謝謝喬納森。固定的,我只關心2欄 – mellerbeck 2011-04-18 16:22:52

回答

1

這可能不會如你所想的那樣工作。這會給你MAX(日期)和MAX(產品),它們可能不在同一行。這裏有一個例子:

CREATE TABLE #Test 
(
    a int, 
    b date, 
    c int, 
) 

INSERT INTO #Test(a, b, c) 
SELECT 1, '01/01/2010', 3 UNION ALL 
SELECT 1, '01/02/2010', 2 UNION ALL 
SELECT 1, '01/03/2010', 1 UNION ALL 
SELECT 2, '01/01/2010', 1 

SELECT a, MAX(b), MAX(c) FROM #TEST 
GROUP BY a 

將返回

----------- ---------- ----------- 
1   2010-01-03 3 
2   2010-01-01 1 

注意,2010年1月3日和3是不一樣的排。在這種情況下,我不認爲這對你很重要,但只是一個人的頭。

至於在SQL2005中的實際問題,我們可能會應用ROW_NUMBER來獲取每個零件的最新日期,但是您在2000年無法訪問此功能。如果以上是給你正確的結果我會說使用它。

+0

我不認爲這是重要的,因爲它會返回給我一排21ST 99-00等......(但是我的大腦被嘲笑它是否給了我正確的結果)因此問題:) – mellerbeck 2011-04-18 16:30:57

3
SELECT pc_bsprhd_key, MAX(pc_bsprdt_shpiadt) 
    FROM pc_bsprdt_tbl 
GROUP BY pc_bsprhd_key; 
相關問題