使用最新日期查询名称

时间:2015-07-13 02:53:14

标签: sql

我正在努力使用sql命令来查询我需要的数据,并希望得到一些帮助。 假设我们在数据库中有数据,如:

Joe    101   2014-02-01
Max   102  2014-04-02
Joe    102  2015-01-01
Am    103   2012-01-04
Joe    103   2015-05-05
Am    103   2014-02-02
Tom   103  2015-01-01

我想得到的结果是(没有订单)。基本上得到最新的Am,Max和Joe(不是Tom)

Am  103  2014-02-02
Max 102  2014-04-02
Joe  103  2015-05-05

2 个答案:

答案 0 :(得分:0)

假设您使用的是MySQL:

SELECT name, id, date
FROM table t1 INNER JOIN
(
    SELECT name, MAX(date) AS date
    FROM table
    GROUP BY name
) t2
ON t1.name = t2.name AND t1.date = t2.date
WHERE t1.name = 'Am' OR t1.name = 'Max' OR t1.name = 'Joe'

内部查询找到每个名称的最新日期,然后对该表格JOIN以获取其他信息。

正如@GordonLinoff指出的那样,需要解释这种对汤姆的偏见。

答案 1 :(得分:0)

这是一般的SQL版本。不确定您的业务规则以及获取数字值MAX是否安全,但如果是这样,则查询非常简单。

SELECT
    Name,
    MAX(Id) AS Id,
    MAX([Date]) AS [Date]
FROM [table]
WHERE Name <> 'Tom' -- Either exclude Tom or include others
-- WHERE Name IN ('Am', 'Max', 'Joe')
GROUP BY Name

如果不能安全地执行id和date字段的最大值,那么您可能需要查看数据库系统的等效ROW_NUMBER函数的语法:

SELECT
    Name,
    Id,
    [Date]
FROM (
    SELECT
        Name,
        Id,
        [Date],
        ROW_NUMBER() OVER (PARTITION BY Name
            ORDER BY [Date] DESC) AS RowNum
    FROM [table]
    WHERE Name <> 'Tom' -- Either exclude Tom or include others
    -- WHERE Name IN ('Am', 'Max', 'Joe')
    ) T
WHERE RowNum = 1