Sqlite:选择分布在总记录上的记录

标签 sql sqlite select

我有一个 sql/sqlite 问题。我需要编写一个从 sqlite 数据库表中选择一些值的查询。我总是希望最大返回记录为 20。如果选择的记录总数超过 20,我需要选择 20 条均匀分布(非随机)的记录。同样重要的是,当按日期排序时,我始终从表中选择第一个和最后一个值。这些记录应首先插入到结果中,最后插入到结果中。

我知道如何在代码中完成此操作,但最好有一个可以执行相同操作的 sqlite 查询。

我现在使用的查询非常简单,如下所示:

"SELECT value,date,valueid FROM tblvalue WHERE tblvalue.deleted=0 ORDER BY DATE(date)"

例如,如果我在 talbe 中有这些记录,并且为了更简单的示例,我想要的最大结果是 5。
id    value    date
 1     10       2010-04-10
 2      8       2010-04-11
 3      8       2010-04-13
 4      9       2010-04-15
 5     10       2010-04-16
 6      9       2010-04-17
 7      8       2010-04-18
 8     11       2010-04-19
 9      9       2010-04-20
 10    10       2010-04-24

我想要的结果是这样均匀分布的:
id    value    date
 1     10       2010-04-10
 3      8       2010-04-13
 5     10       2010-04-16
 7      8       2010-04-18
 10    10       2010-04-24

希望能解释我想要什么,谢谢!

最佳答案

像这样的东西应该适合你:

SELECT *
FROM (
    SELECT v.value, v.date, v.valueid 
    FROM tblvalue v
    LEFT OUTER JOIN (
        SELECT min(DATE(date)) as MinDate, max(DATE(date)) as MaxDate
        FROM tblvalue 
        WHERE tblvalue.deleted = 0 
    ) vm on DATE(v.date) = vm.MinDate or DATE(v.date) = vm.MaxDate
    WHERE tblvalue.deleted = 0 
    ORDER BY vm.MinDate desc, Random()
    LIMIT 20
) a
ORDER BY DATE(date)    

关于Sqlite:选择分布在总记录上的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2729762/

相关文章:

sql - 我可以在同一个WITH查询中选择多个表吗?

sql - 如何向 SQL Server 2008 或 2012 中的现有表添加具有默认值的列?

android - Json从Retrofit到SQLite数据库

mysql - 选择与建议的唯一索引冲突的 MySQL 记录

sql - 如何使用where条件获取包含数字和字符串的表的结果

mysql - 按输出限制分组

android.database.CursorWindowAllocationException : Cursor window allocation of 2048 kb failed even after closing cursor

android - 2048 kb 的游标窗口分配因房间上的 rxjava 适配器而失败

sql - 我非常讨厌 MySQL(帮助构建查询)

android - SQLite 选择今天和前一天的所有记录