选择1+最近的行

时间:2015-11-24 14:26:07

标签: sql select oracle11g

给出的是一张带有文章的表格。以下示例性表格包含不同版本的一篇文章:

ID     ARTICLE_NUMBER   STORE_ID   COUNTRY   TYPE   VALID_FROM
----------------------------------------------------------------
100    1                22         DE        A      2015-11-01
101    1                22         DE        A      2015-11-02
102    1                22         DE        A      2015-11-03
103    1                22         DE        A      2015-11-04
104    1                22         DE        B      2015-11-10
105    1                22         DE        B      2015-11-11
106    1                22         DE        B      2015-11-11

我需要的是一个只返回

文章的 ID 的查询
  • article_number = 1 AND
  • store_id = 22 AND
  • country =' DE' AND
  • 最新的valid_from时间戳。

到目前为止,查询应返回ID = 105或106(两者都具有相同的valid_from日期,但我只想在结果中使用其中一个,不管是哪个,而不是两者都有)。 AND:因为本文有两种类型(A + B),我的结果集中也需要ID = 103。

查询必须如何?

1 个答案:

答案 0 :(得分:1)

您可以尝试过滤器中的HAVING参数并选择MAX(ID)

或者使用子选择:

SELECT [Type],(SELECT TOP(1) ID from dbo.articles S WHERE S.[Type] = A.Type AND S.Valid_From = MAX(A.Valid_From))
FROM dbo.articles A
WHERE 
    ARTICLE_NUMBER = 1
    AND STORE_ID = 22
    AND Country = 'DE'
    -- AND Valid_FROM = (SELECT MAX(VALID_FROM) FROM dbo.articles)
GROUP BY [Type]