Sqlite:选择记录遍布总记录

时间:2010-04-28 13:23:08

标签: 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

希望解释我想要的东西,谢谢!

3 个答案:

答案 0 :(得分:2)

这样的事情对你有用:

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)    

答案 1 :(得分:0)

我想你想要这个:

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

答案 2 :(得分:0)

换句话说,您想选择带日期列的行,以便该日期来自日期的排序列表,我们从哪里获取每个奇数元素?并添加最后记录的元素(带有最新日期)?一切都限制为最多20行吗?

如果是这样,那么我认为这应该做到:

SELECT id,value,date FROM source_table WHERE date IN (SELECT date FROM source_table WHERE (rowid-1) % 2 = 0 OR date = (SELECT max(date) FROM source_table) ORDER BY date) LIMIT 20