2010-07-20 78 views
1

我期望从表中获取第一行(按date降序排列),然后获取其余行(按last_name升序排列)。我假设我需要为此使用UNION语句,但我无法使其工作。2来自同一个表的SQL查询

在此先感谢

+0

是“日期”,本身保证是唯一的? – Wrikken 2010-07-20 20:27:22

+0

你的表格结构是什么?你有PK吗? – 2010-07-20 20:27:46

+0

日期不是唯一的,因为它是从日期格式导入的时间戳。是的,我有一个名为“id”的PK。 – Dylan 2010-07-20 20:31:10

回答

2
SELECT * 
FROM yourtable 
ORDER BY 
    id = (SELECT id FROM yourtable ORDER BY date DESC LIMIT 1) DESC, 
    last_name 
+1

我喜欢“按计算布尔标志排序”技巧。 – 2010-07-20 20:31:06

+0

它似乎有效。谢谢你的帮助! – Dylan 2010-07-20 20:35:37

2

为什么不运行两个查询?这似乎是一个明显的答案。

不是每个任务都需要在单个查询中完成。你是否也在一个语句中编写了所有的PHP代码? ;-)

+0

我知道单独做这件事情会更有意义(我通常会这样做),但是如果没有太多细节的话,如果在1个查询中有办法做到这一点,那将会容易得多。 – Dylan 2010-07-20 20:28:46

2

使用MySQL的假设,你可以使用:

(SELECT t.* 
    FROM TABLE t 
ORDER BY t.date DESC 
    LIMIT 1) 
UNION 
(SELECT t.* 
    FROM TABLE t 
ORDER BY t.last_name) 

您需要封装在括号中的语句来应用ORDER BY - 否则,ORDER BY被应用到UNION后的结果集。

+0

这将包括第一行两次,一次在顶部,再次低一些,这是海报可能不想要的。 – 2010-07-20 20:36:40

+1

@斯科特斯塔福德:不,它不会因为联盟删除重复。如果它是'UNION ALL',那么你会是对的# – 2010-07-20 20:37:46

+0

有趣......每天学点东西。谢谢。 – 2010-07-20 20:55:14