这感觉应该有一个基本的解决方案,但我似乎没有得到它.
拿这个查询:
SELECT Category FROM Article
GROUP BY Category
Run Code Online (Sandbox Code Playgroud)
我想有效地做到这一点:
SELECT Category, DatePublished FROM Article
GROUP BY Category
ORDER BY DatePublished DESC
Run Code Online (Sandbox Code Playgroud)
我真的不想选择DatePublished,但它似乎有意义.但这不起作用.
基本上我想通过最新的DatePublished文章订购类别.
Qua*_*noi 20
SELECT Category
FROM Article
GROUP BY
Category
ORDER BY
MAX(DatePublished) DESC
Run Code Online (Sandbox Code Playgroud)
既然你做了GROUP BY,你需要在非分组列上运行一些聚合函数.
MAX 将相应地从每个类别和订单类别中选择上次发布文章的日期.
在聚合( - > GROUP BY),只能选择与聚合函数(如组合/使用领域SUM,MAX,MIN在上市)和字段GROUP BY-clause.
简单样本:
A | B
-----+-----
1 | 2
1 | 3
Run Code Online (Sandbox Code Playgroud)
如果你写SELECT A,B FROM table GROUP BY A,那会产生:
A | B
-----+-----
1 |{2,3}
Run Code Online (Sandbox Code Playgroud)
但这是不可能的(B在一行中有2个值!?!).你必须对B它们组合在一起的值做些什么.有两种可能性:
1:添加B在GROUP BY-clause
SELECT A,B FROM table GROUP BY A,B
Run Code Online (Sandbox Code Playgroud)
产量
A | B
-----+-----
1 | 2
1 | 3
Run Code Online (Sandbox Code Playgroud)
2:使用聚合功能B
SELECT A,MAX(B) FROM TABLE GROUP BY A,B
Run Code Online (Sandbox Code Playgroud)
给你
A | B
-----+-----
1 | 3
Run Code Online (Sandbox Code Playgroud)
相同的论点适用于该ORDER BY条款.
大多数时候,当你想写一个像我出现的第一个语句时,可能性1是解决方案,因为你可能知道A并且B属于一起(常见样本:UserId和UserName)但是RDBMS不知道它!