我们假设我有一个名为' messages':
的表格+-----------+--------+
| timestamp | poster |
+-----------+--------+
| 1 | John |
| 2 | Peter |
| 3 | Peter |
| 4 | Chris |
| 5 | John |
+-----------+--------+
我希望查询首先按第一张海报列出所有帖子,然后按第二张海报列出所有帖子等。不使用子查询。第一张海报由时间戳确定。找出谁是第一个并返回所有帖子,然后谁是第二个:
+-----------+--------+
| timestamp | poster |
+-----------+--------+
| 1 | John |
| 5 | John |
| 2 | Peter |
| 3 | Peter |
| 4 | Chris |
+-----------+--------+
修改
好的,我的问题太简单了。你提供工作的基本例子是因为(J)ohn来自(P)eter。如果彼得是第一个怎么办?您需要将DESC添加到poster子句中。使用简单ORDER BY的SQL语句不能解决第一,第二,第三等人的排序问题。
再次编辑
我添加了#34; Chris"混合使我更清楚我想要什么。约翰是第一张海报;得到他所有的帖子。彼得,因为他是第二。然后克里斯。
答案 0 :(得分:1)
无法想到没有子查询的方法,
但是如果你能接受你的答案作为csv列表的时间戳。那么这是一种方式。
SELECT poster,
GROUP_CONCAT(timestamp ORDER BY timestamp) as timestamps
FROM messages
GROUP BY poster
ORDER BY MIN(timestamp)
答案 1 :(得分:1)
我认为除了创建另一个结果集并加入之外别无他法:
SELECT poster, MIN(timestamp) AS first_ts
FROM messages
GROUP BY poster
ORDER BY first_ts;
结果:
+--------+-----------+
| poster | first_ts |
+--------+-----------+
| John | 1 |
| Peter | 2 |
| Chris | 4 |
+--------+-----------+
答案 2 :(得分:0)
使用ORDER BY
SELECT * FROM my_table ORDER BY poster ASC;
答案 3 :(得分:0)
根据@Deepak写的内容,您需要ORDER BY
SELECT timestamp, poster
FROM my_table
ORDER BY poster, timestamp;
这将为您提供第二张表。
答案 4 :(得分:0)
试试这个......
SELECT *
FROM TableName
ORDER BY poster ASC,
timestamp ASC;
或者只是......
SELECT *
FROM TableName
ORDER BY poster,
timestamp;
如果未指定排序顺序,则SQL会自动采用ASC或升序,否则,请添加DESC以进行降序。
答案 5 :(得分:0)