我正在努力使用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
答案 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