当前位置: 首页 > 面试题库 >

SQLite条件ORDER BY中的DESC

傅乐湛
2023-03-14
问题内容

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

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

这是为了实现Facebook的排序,即按日期降序排列=-原始帖子(始终具有空的parentGUID),并按日期升序答复原始帖子。


问题答案:

如果我理解正确,那么您将需要加入具有父帖子日期的表格。如果可用,则应执行以下操作:

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不太熟悉。



 类似资料:
  • 问题内容: 我需要检索与列表中存储的ID匹配的记录。在运行时生成的查询很简单: 相当于 很好,但是如果列表包含成百上千个ID,该怎么办?该语句将非常庞大,并且在某些时候SQL解析器可能崩溃了,或者如果不是,则性能可能会很差。 我该如何以对所检索的记录数量不太敏感的方式来执行此操作? (我不能只遍历列表并逐个检索记录的原因是,我需要数据库对我执行ORDER BY。记录必须来自按特定字段排序的数据库,

  • 我有两个表表1(col1,col2,col3,col4)和表2(çol1,col2,col5)。 表1 col3是空的,我想根据表1(col1, col2)和表2(col1, col2)的匹配更新表2 col5的数据。

  • 问题内容: 我正在使用angular-filter中的 groupBy 按对象的date属性对对象数组进行分组。 产生以下内容: 如何从最近的日期开始颠倒顺序?当我打印到控制台时,以我想要的顺序打印阵列: 我还编写了一个自定义过滤器来反转groupBy之后的顺序: 我已经这样申请了: 问题答案: 最近有同样的问题。创建一个对象,但需要一个数组,因此涉及一些时髦。我最终从他们的问题页面直接得到了答案

  • 我试图在我的查询中创建一个orderBy,并对库中的项目进行分页,但不是对整个查询进行排序,而是一页一页地对内容进行排序,因此如果我对desc进行排序,它只工作一页,当我转到下一页时,我可以找到真正不同的值(排序,但与第一页没有关系)。 下面是我的问题:

  • 问题内容: 相等的: 左联接: 相等的: 正确加入 相等的: 当我们在“ WHERE”子句中指定联接条件与“ ON联接条件”时有什么区别? 通过在“ ON”子句和“ WHERE”子句中指定联接条件,我们在内部,左外部,右外部联接中是否获得相同的结果。请指教。 问题答案: 好吧,您所谓的“等效”并不等同于外部联接。让我们以左联接为例。 加入条件: 与哪里: 将条件放到WHERE子句中可以有效地使联接

  • 问题内容: 我不想使用它,因为它基本上是a ,并且使用旧列中的数据很复杂。 有点骇人听闻,因为所有错误都会被忽略,因此这不是一种选择。 我已经阅读了一篇使用以下内容的博客文章 我喜欢这种方法真的很多,但我不知道我怎样才能实现这个用在SQLite的,这是我得到了什么: 在似乎是使用的唯一方法在SQLite的,因为一切抛出一个语法错误。但是在中也不能使用-或-语句,因此会引发错误。 我尝试了以下 但这