选择基于Count的行(SQLite)

时间:2014-08-20 18:08:18

标签: sqlite

希望得到一些帮助:

1)我试图选择在30天滚动期内出现6次或更多次的CustomerID的所有呼叫(行),因此如果CustomerID在30天内在文件中出现6次或更多次,那么向我提供该CustomerID的所有记录。

2)我还需要选择在30天滚动期内出现2次或更多次的所有CustomerID调用,但仅限于两个特定列也匹配(CallType1和CallType2)。与6次调用的查询非常相似,但我们需要考虑调用类型也完全相同。

SELECT * FROM tablename
WHERE CustomerID IN (SELECT CustomerID FROM tablename
    WHERE "CustomerID" 
    IN ('MyProgram'));

上面的查询选择了到达我的程序的所有CustomerID。我需要添加逻辑来计算> = 6个CustomerID(上面的第1项),然后再使用第二个查询来获取具有相同CallTypes的> = 2。

1 个答案:

答案 0 :(得分:0)

最里面的子查询计算从First开始的窗口中有多少个调用。 中间子查询为表中的每个可能窗口检查此值。 (这样效率很低,但SQLite没有窗口函数。)

SELECT *
FROM TableName
WHERE CustomerID IN (SELECT CustomerID
                     FROM TableName AS First
                     WHERE (SELECT COUNT(*)
                            FROM TableName
                            WHERE Date BETWEEN      First.Date
                                           AND date(First.Date, '+30 days')
                              AND CustomerID = First.CustomerID
                           ) >= 6)

这假设有一个列Date使用默认日期格式(yyyy-mm-dd)。