2014-08-20 4 views
0

Надеясь на помощь в этом:Выбор строк с на основе графа (SQLite)

1) Я пытаюсь выбрать все вызовы (строки) для CustomerIDs, которые показывают до 6 или более раз в течение 30 дней качению период , поэтому, если CustomerID находится в файле 6 или более раз в течение 30 дней, тогда он предоставит мне все записи для этого CustomerID.

2) Мне также необходимо выбрать все вызовы для идентификаторов клиентов, которые отображаются в течение 30-ти дней в течение 2 или более раз, но ТОЛЬКО, если также совпадают два определенных столбца (CallType1 и CallType2). Очень похоже на запрос с 6 вызовами, но нам нужно учитывать, что типы вызовов точно такие же.

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

В запросе выше выбираются все идентификаторы клиентов, которые достигают моей программы. Мне нужно добавить логику для подсчета> = 6 CustomerIDs (пункт 1 выше), а затем второй запрос, чтобы получить> = 2 с теми же CallTypes.

ответ

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).

+0

Второй вопрос остается как упражнение. В любом случае, вы должны задать один вопрос на вопрос. –

Смежные вопросы