2009-10-30 2 views
1

У меня есть таблица с единственным соответствующим столбцом, которое является завершением Date, через несколько секунд после того, как элемент был отмечен как завершенный. Я хотел бы сделать оператор select, чтобы подсчитать количество элементов, заполненных, сгруппированных по той неделе, когда они были отмечены как завершенные. До сих пор, у меня есть что-то вроде этого:SQLite выражение для подсчета строк, сгруппированных по неделям

SELECT (completionDate-min)/(60*60*24*7) 
FROM 
    (SELECT min(completionDate) AS min 
    FROM TASK) 
LEFT JOIN task; 

Который возвращает эти результаты:

0 
2 
2 
2 
3 
3 
3 

Это означает, что 1 пункт был завершен в течение первой недели, и 3 пункты были выполнены в третьем и 4 недели.

Я сможем найти лучшее значение для min программно (в частности, в начале недели). Мне действительно нужен способ группировать по результату и подсчитывать количество результатов. Идеальный результат будет:

0|1 
2|3 
3|3 

Мой следующий шаг должен был попробовать это:

SELECT COUNT(idx) 
FROM 
    (SELECT ((completionDate-min)/(60*60*24*7)) AS idx 
    FROM 
     (SELECT min(completionDate) AS min 
     FROM TASK) 
    LEFT JOIN task) 
GROUP BY idx; 

Что дает результаты, которые выглядят своего рода вид права, но не так в пути я не понимаю:

0 
1 
3 
3 

На данный момент, я просто застрял. Я признаю, что мой SQL не так уж и хорош, поэтому любая оптимизация по тому, что у меня есть, также будет оценена.

+1

Добавить "IDX" к select, чтобы найти число нечетных 0: SELECT idx, COUNT (idx) ... –

ответ

2
SELECT (completionDate - min)/(60*60*24*7) AS week, 
     COUNT(*) AS count 
FROM task, (SELECT MIN(completionDate) AS min FROM task) 
GROUP BY week 
HAVING completionDate NOT NULL; 
0

Выяснил это. Были некоторые нулевые значения. Добавлен WHERE completoinDate NOT NULL:

SELECT idx, COUNT(idx) 
FROM 
    (SELECT ((completionDate-min)/(60*60*24*7)) AS idx 
    FROM 
     (SELECT min(completionDate) AS min 
     FROM TASK) 
    LEFT JOIN task WHERE completionDate NOT NULL) 
GROUP BY idx; 

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

1

Source of data:

ВЫБОР STRFTIME ('% Y% W' date_col) КАК ж, other_data ОТ my_table ГРУППЫ ПО ш

See http://sqlite.org/lang_datefunc.html for usage. That doc also 
includes some caveats related to precision and locale, etc.