我有一个 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/