SQL:选择每个类别的最新日期

37

我正在从数据库中提取数据,其中一个表包含两列,这两列共同标识一个位置,另一列包含每次服务的日期。是否有可能编写一个 SQL 查询,以便获得每个位置最近服务的时间?

因此,如果我的原始数据看起来像这样:

category_a  category_b  date
       1           a     1/1/01
       1           a     2/2/02
       1           b     1/2/01
       1           b     2/3/02
       2           a     1/3/01
       2           a     2/4/02
       2           b     1/4/01
       2           b     2/5/02

那么查询将返回这个结果:

category_a  category_b  date
       1           a     2/2/02
       1           b     2/3/02
       2           a     2/4/02
       2           b     2/5/02

如果数据库的组合类别是存储在单独的表中,那么这将很容易实现。但是,我无法控制这个数据库,无法对其进行更改。


为什么这个问题上有一个(-1)? - user153923
7
我也有同样的疑问。虽然我不是SQL专家,但我认为我已经清楚地解释了我的问题... - Wilduck
也许你在另一个帖子里惹恼了某个人,他们通过在这里给你打负面评价来报复。我以前也遇到过这种情况。 - user153923
4个回答

30
SELECT
    category_a,
    category_b,
    MAX(date)
FROM
    Some_Unnamed_Table
GROUP BY
    category_a,
    category_b
ORDER BY
    category_a,
    category_b

我乐意在我所能的范围内帮助人们,否则我也不会在这个网站上。但是,在发布问题之前你是否真正搜索过答案呢?


22
我做了。不幸的是,我没有用谷歌搜索到的方式来解释这个问题。实际上,在花了15分钟阅读关于CASE语句的文章之后,我放弃了,说:“算了,Stack Overflow上肯定有人知道如何回答这个问题。”我真的很感激你的帮助。 - Wilduck
4
明白了,很高兴我能帮忙。 - Tom H
14年后,再加上全球大流行,我也太累/忙得记不起怎么做了,就上网搜索了一下,然后就找到了。永远不要低估Stack Overflow的力量。 - undefined

6

这是一个简单的“按组”操作,利用“最近”的日期是“最高值”,即max()日期。

select category_a, category_b, max(date)
from mytable
group by category_a, category_b
order by category_a, category_b -- The ORDER BY is optional, but the example data suggests it's needed

2

尝试

select category_a, category_b, max(date) as last_update from table group by category_a, category_b

2

选择 category_a, category_b, max( date) from tbl group by category_a, category_b;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接