这感觉应该有一个基本的解决方案,但我似乎没有得到它。
采取此查询:
SELECT Category FROM Article
GROUP BY Category
我想有效地做到这一点:
SELECT Category, DatePublished FROM Article
GROUP BY Category
ORDER BY DatePublished DESC
我真的不想选择DatePublished,但它似乎有意义。但这不起作用。
基本上我想通过最新的DatePublished文章订购类别。
答案 0 :(得分:20)
SELECT Category
FROM Article
GROUP BY
Category
ORDER BY
MAX(DatePublished) DESC
由于您执行GROUP BY
,因此需要在非分组列上运行某些聚合函数。
MAX
将从每个类别和订单类别中选择上次发布文章的日期。
答案 1 :(得分:6)
在聚合中( - > GROUP BY
),您只能选择/使用字段与聚合函数(例如SUM
,MAX
,MIN
)和GROUP BY
- 子句中列出的字段。
简单样本:
A | B
-----+-----
1 | 2
1 | 3
如果你写SELECT A,B FROM table GROUP BY A
,那就会产生:
A | B
-----+-----
1 |{2,3}
但这是不可能的(B
在一行中有2个值!?!)。你必须对B
的值进行一些操作,它们将它们组合在一起。所以有两种可能性:
1 :在B
- 条款中添加GROUP BY
SELECT A,B FROM table GROUP BY A,B
产量
A | B
-----+-----
1 | 2
1 | 3
2 :在B
SELECT A,MAX(B) FROM TABLE GROUP BY A,B
给你
A | B
-----+-----
1 | 3
相同的参数适用于ORDER BY
子句。
大多数时候,当你想写一个像我出现的第一个语句时,可能性1是解决方案,因为你可能知道A
和B
属于一起(常见样本) :UserId
和UserName
)但是RDBMS不知道它!