【问题标题】:Alternative for Window function in SQLite version < 3.25.0?SQLite 版本 < 3.25.0 中 Window 函数的替代方案?
【发布时间】:2020-04-27 08:09:06
【问题描述】:

我想检索表中每个 chat_id 匹配项的最后 10 行。

这很完美:


SELECT *
FROM 
    (SELECT a.*,
         row_number()
        OVER (PARTITION BY a.chat_id
    ORDER BY  a.timestamp DESC ) AS row
    FROM messages a ) AS foo
WHERE row <= 10

但是当我将此代码放在我的 React Native 应用程序上时,它会抛出错误,这是因为它仅在 SQLite 3.25.0 及更高版本中受支持。

https://developer.android.com/reference/android/database/sqlite/package-summary.html

还有其他方法可以做到这一点吗?我试图避免对 SQL 进行多次查询。

【问题讨论】:

    标签: android sql sqlite react-native greatest-n-per-group


    【解决方案1】:

    一种选择是使用相关子查询来计算有多少记录具有与当前行相同的chat_id 和更大的timestamp,并使用结果进行过滤:

    select m.*
    from messages m
    where (
        select count(*) 
        from messages m1 
        where m1.chat_id = m.chat_id and m1.timestamp > m.timestamp
    ) < 10
    

    【讨论】:

    • 谢谢,正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多