我需要选择由以下逻辑排序的记录,但是当DESC处于条件状态时,SQLite会引发错误。
ORDER BY
CASE
WHEN parentGUID IS NULL THEN datePosted DESC
ELSE datePosted
END
这是为了实现Facebook的排序= - 原始帖子(总是有空的parentGUID)按日期递减,并回复按日期升序排序的原始帖子。
答案 0 :(得分:5)
如果我理解正确,您需要加入具有父帖子日期的表格。如果可以的话,这样的事情应该做:
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并不是很熟悉。
答案 1 :(得分:1)
通过你的纠正,我想我现在明白了。这是一些示例数据
|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|
在单个查询中订购非常困难(可能很慢)