SQLite中的DESC条件ORDER BY

问题描述:

我需要选择以下逻辑排序的记录,但是当DESC处于条件时,SQLite会产生一个错误。SQLite中的DESC条件ORDER BY

ORDER BY 
CASE 
    WHEN parentGUID IS NULL THEN datePosted DESC 
    ELSE datePosted 
END 

这是实现类似Facebook的订货= - 原帖(它总是具有空parentGUIDs)按日期递减和回复按日期排序升序原帖。

+1

根据列的值,您无法按每行方向切换顺序。 – 2011-04-29 19:09:08

+0

目前还不清楚你想要做什么。你想对不同的行进行排序吗? – Gabe 2011-04-29 19:09:19

+0

我更新了我的“答案”。如果你想做我所描述的事情,那么我放弃了,似乎很难做一个单一的查询:-) – 2011-04-29 19:43:32

订购如果我理解你对,你需要加入到具有父职位日期的表格中。如果这是可用的,这样的事情应该做的:

DECLARE @X TABLE 
(
ID INT NOT NULL IDENTITY PRIMARY KEY, 
parentID INT, 
datePosted DATE NOT NULL 
) 
INSERT INTO @X (parentID, datePosted) VALUES 
    (NULL, '2010-01-01'), 
    (NULL, '2010-01-02'), 
    (1, '2010-01-03'), 
    (1, '2010-01-04'), 
    (1, '2010-01-05'), 
    (2, '2010-01-06') 

SELECT 
    Post.parentID, Post.datePosted 
FROM @X AS Post 
    LEFT JOIN @X AS Parent ON Post.parentID = Parent.ID 
ORDER BY 
    -- Order by post date, or rather the parent's post date if one exists 
    COALESCE(Parent.datePosted, Post.datePosted) 
    -- Order by reply date 
    Post.datePosted 

这给出了这样的输出:

parentID datePosted 
-------- ---------- 
NULL  2010-01-02 
2  2010-01-06 
NULL  2010-01-01 
1  2010-01-03 
1  2010-01-04 
1  2010-01-05 

注意,这将打破,如果答复可以反过来答复;你需要更强大的东西。在MS SQL中,我会使用CTE,但我对Sqlite并不熟悉。

+0

哦,感谢卢卡斯澄清OP的意图,希望你不要介意我借用你的样本数据! – 2011-04-29 20:16:31

+0

没问题... ;-) – 2011-04-29 20:33:46

+0

+1 FWIW,'CASE ... END DESC'也可以表示为'COALESCE(Parent.datePosted,Post.datePosted)DESC' – pilcrow 2011-05-02 13:41:20

随着你的改正,我想我现在明白了。下面是一些示例数据

|GUID|parentGUID|datePosted| 
+----+----------+----------+ 
|1 |null  |2010-01-01| 
|2 |null  |2010-01-02| 
|3 |1   |2010-01-03| 
|4 |1   |2010-01-04| 
|5 |1   |2010-01-05| 
|6 |2   |2010-01-06| 

而且我猜你想这样的输出:

|GUID|parentGUID|datePosted| 
+----+----------+----------+ 
|1 |null  |2010-01-01| 
|5 |1   |2010-01-05| 
|4 |1   |2010-01-04| 
|3 |1   |2010-01-03| 
|2 |null  |2010-01-02| 
|6 |2   |2010-01-06| 

这是相当难(可能慢)在一个查询