DESite在SQLite条件ORDER BY中

Eri*_*rik 3 sql sqlite

我需要选择由以下逻辑排序的记录,但是当DESC处于条件状态时,SQLite会引发错误.

ORDER BY
CASE 
  WHEN parentGUID IS NULL THEN datePosted DESC
  ELSE datePosted
END
Run Code Online (Sandbox Code Playgroud)

这是为了实现Facebook的排序= - 原始帖子(总是有空的parentGUID)按日期递减,并回复按日期升序排序的原始帖子.

小智 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
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出:

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
Run Code Online (Sandbox Code Playgroud)

请注意,如果回复可以依次回复,则会中断; 你需要更强大的东西.在MS SQL中,我使用CTE,但我对Sqlite不是很熟悉.