2011-07-13 55 views
18

我从数据库中提取数据,其中一个表包含两列,它们共同确定一个位置,另一列包含每次提供服务的日期。是否可以编写一个SQL查询,以便获取每个位置最近的服务时间?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 

这将是很容易做到,如果数据库以这样的方式创作的那类别组合存储在一个单独的表格中。但是,我不控制这个数据库,所以我不能对它进行更改。

+0

为什么会出现在这个问题上(-1)? – jp2code

+3

我想知道同样的。我不是SQL专家,但我想我已经很好地解释了我的问题...... – Wilduck

+0

也许你在另一个线程上使某人不高兴,并且他们通过在这里叮当作出报复。我以前有过这种情况。 – jp2code

回答

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

我当然不介意帮助当我可以的人,或者我不会在这个网站上,但是你真的在发布之前搜索这个答案吗?

+3

我做到了。不幸的是,我没有用谷歌的方式来解释这个词。事实上,我在15分钟之前阅读了关于CASE的陈述,然后我说:“拧它,SO上的某个人知道如何回答这个问题。”我真的很感激帮助。 – Wilduck

+0

了解。很高兴我能帮上忙。 –

2

这是一个简单的“分组依据”使用的事实的“最近”日期是“最高值”,或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 
1

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

1

尝试

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