SQL - 选择同一篇文章但不同类型的最大日期

时间:2014-01-15 08:25:35

标签: sql date max

我有以下查询必须显示此表:

+-------------+------------+------------+----------+
|WRIN         |DESC        |TYPE        |DATE      |
+-------------+------------+------------+----------+
|10000-000-000|BLACK PEPPER|PQL Articles|13/02/2012|
+-------------+------------+------------+----------+
|10000-001-000|SALT        |PQL Articles|25/01/2010|
+-------------+------------+------------+----------+

但请改为:

+-------------+------------+------------+----------+
|WRIN         |DESC        |TYPE        |DATE      |
+-------------+------------+------------+----------+
|10000-000-000|BLACK PEPPER|PQL Articles|13/02/2012|
+-------------+------------+------------+----------+
|10000-000-000|BLACK PEPPER|PQL Articles|17/08/2010|
+-------------+------------+------------+----------+
|10000-000-000|BLACK PEPPER|PQL Articles|25/01/2010|
+-------------+------------+------------+----------+
|10000-000-000|BLACK PEPPER|NO MARK UP  |04/06/2009|
+-------------+------------+------------+----------+
|10000-001-000|SALT        |PQL Articles|25/01/2010|
+-------------+------------+------------+----------+
|10000-001-000|SALT        |NO MARK UP  |15/07/2009|
+-------------+------------+------------+----------+

由于名称和其他非重要列,我简化了查询:

SELECT Format(adfc.[arti-cd-base], "00000") & "-" & 
              Format(pub_adfc.[arti-cd-sfx], "000") & "-" & 
              Format(pub_adfc.[adfc-cd-diffco], "000") AS Wrin, 
       pub_adfc.[adfc-desc]                            AS Description, 
       pub_arco.[arco-desc], 
       Max(pub_arcp.[arcp-dt-act])                     AS [MaxVanarcp-dt-act] 
FROM   (pub_arcp 
        INNER JOIN pub_arco 
                ON pub_arcp.[arco-nr] = pub_arco.[arco-nr]) 
       INNER JOIN pub_adfc 
               ON ( pub_arcp.[adfc-cd-diffco] = pub_adfc.[adfc-cd-diffco] ) 
                  AND ( pub_arcp.[arti-cd-base] = pub_adfc.[arti-cd-base] ) 
                  AND ( pub_arcp.[arti-cd-sfx] = pub_adfc.[arti-cd-sfx] ) 
GROUP  BY Format(pub_adfc.[arti-cd-base], "00000") & "-" & 
                    Format(pub_adfc.[arti-cd-sfx], "000") & "-" & 
                    Format(pub_adfc.[adfc-cd-diffco], "000"), 
          pub_adfc.[adfc-desc], 
          pub_arco.[arco-desc], 
          pub_arcp.[arcp-dt-act], 
          pub_adfc.[busi-id] 
HAVING (( ( pub_adfc.[busi-id] ) = "lpq" )) 
ORDER  BY Format(pub_adfc.[arti-cd-base], "00000") & "-" & 
                    Format(pub_adfc.[arti-cd-sfx], "000") & "-" & 
                    Format(pub_adfc.[adfc-cd-diffco], "000"), 
          pub_arcp.[arcp-dt-act] DESC; 

我用TOP 1,Max(arcp-dt-act)尝试了一些东西但到目前为止没有任何作用。

有人知道如何从这个查询中获取第一张表吗?

提前致谢

更新1:

@Daniel B

是,对于最近的日期,WRIN / DESC为1行,因此也属于最近日期的类型。

@PeterRing

是的,完全是这样的。但我仍在想办法如何做到这一点。

现在我只删除了[arcp-dt-act](DATE)的DATE列和GROUP BY和ORDER BY,并在select I used Last(pub_arco。[arco-desc])而不是pub_arco中删除了。 [arco-desc]这似乎只给出了一篇文章和正确的类型(最近日期的类型)

BTW:查询中显示的DATE不重要,WRIN,DESC和TYPE是。我只需要最新的类型,因此我需要最近的日期,但Last()似乎也是这样做的。

更新2:

@Daniel B

如果这是您的意思,那么查询正在Access数据库2010中使用?

1 个答案:

答案 0 :(得分:0)

尝试

SELECT DISTINCT ON (WRIN, DESC, TYPE)
  *
FROM (
  //your query here
) as subq
ORDER BY WRIN, DESC, TYPE, DATE DESC

如果您不需要,可以不使用“类型”。