假设我有一个名为'消息'的表:
+-----------+--------+
| 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)erter之前。如果彼得第一个怎么办?您需要将DESC添加到海报子句中。您的SQL语句使用简单的订单,请勿解决谁是第一个,第二,第三等的订购问题
再次编辑
我将"克里斯"添加到混合中,以使我想要的东西更加简单。约翰是第一张海报。获取他的所有帖子。然后彼得,因为他是第二。然后chris。
我认为除了创建另一个结果设置并加入它:
没有其他方法: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 |
+--------+-----------+
无法想到没有子查询的方法,
但是,如果您可以接受答案作为CSV列表的时间戳。那是一种方法。
SELECT poster,
GROUP_CONCAT(timestamp ORDER BY timestamp) as timestamps
FROM messages
GROUP BY poster
ORDER BY MIN(timestamp)
sqlfiddle
使用 ORDER BY
SELECT * FROM my_table ORDER BY poster ASC;
在@Deepak写的内容上扩展,您需要ORDER BY
SELECT timestamp, poster
FROM my_table
ORDER BY poster, timestamp;
这将为您提供第二个表。
尝试这个...
SELECT *
FROM TableName
ORDER BY poster ASC,
timestamp ASC;
或简单...
SELECT *
FROM TableName
ORDER BY poster,
timestamp;
如果您不指定排序顺序,则SQL自动假定ASC或上升,否则,添加desc以降序。
尝试以下:
SELECT * FROM messages ORDER BY timestamp ASC, poster ASC;
请在此处阅读更多。