对于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是独一无二的,所以我尝试过使用max这样的产品给我带来唯一性。
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名?
答案 0 :(得分:3)
SELECT pc_bsprhd_key, MAX(pc_bsprdt_shpiadt)
FROM pc_bsprdt_tbl
GROUP BY pc_bsprhd_key;
答案 1 :(得分:1)
这可能不像您认为的那样有效。这将为您提供MAX(日期)和MAX(prod) ,它们可能不在同一行 。这是一个例子:
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
请注意,1/03/2010和3不在同一行。在这种情况下,我认为这不重要,但只是抬头。
至于SQL2005中的实际问题,我们可能会对组应用ROW_NUMBER以获取每个部分的最新日期行,但是您在2000年无法访问此功能。如果上面给出了你正确的结果,我会说使用它。