2015-07-13 54 views
2

我正在努力与sql命令来查询我需要的数据,并希望得到一些帮助。 比方说,我们有像在DB数据:查询名称与最新日期

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 

我希望得到的结果(无顺序)。基本上得到最新的上午,Max和乔(不是汤姆)的

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

为什么不是汤姆?有什么反对他? –

+2

请使用您正在使用的SQL类型标记您的问题。 –

回答

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指出的那样,这种对汤姆的偏见需要解释。

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和日期字段的最大,那么你可能要考虑等效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 
+0

请投这个问题。 –

+1

@sithathai - 如果它帮助你并且接受它,如果它解决了你的问题,请随时注册一个答案。这有助于他人知道哪些答案可能有所帮助,并且是否解决了您的问题。它也增加了你的声誉。 –