希望得到一些帮助:
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。
答案 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
)。