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)按日期递减和回复按日期排序升序原帖。
订购如果我理解你对,你需要加入到具有父职位日期的表格中。如果这是可用的,这样的事情应该做的:
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并不熟悉。
哦,感谢卢卡斯澄清OP的意图,希望你不要介意我借用你的样本数据! – 2011-04-29 20:16:31
没问题... ;-) – 2011-04-29 20:33:46
+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|
这是相当难(可能慢)在一个查询
根据列的值,您无法按每行方向切换顺序。 – 2011-04-29 19:09:08
目前还不清楚你想要做什么。你想对不同的行进行排序吗? – Gabe 2011-04-29 19:09:19
我更新了我的“答案”。如果你想做我所描述的事情,那么我放弃了,似乎很难做一个单一的查询:-) – 2011-04-29 19:43:32