2015-04-08 3 views
0

У меня есть таблица вроде этого:Сумма записей о качестве SQLite запроса

| id(INTEGER) | id2(INTEGER) | time(DATETIME) | value(REAL) | 
|-------------|--------------|----------------------|-------------| 
|  1  |  2000 | 2004-01-01 00:00:00 | 1000  | 

который я запроса с помощью Visual Basic. Теперь я хочу, чтобы суммировать все данные между 2004 годом и 2010, так что результат выглядит следующим образом:

2004 11,000 
2005 35,000 
2006 46,000 

Cif Я делаю это в визуальной основе это достигается с помощью нескольких петель, но, к сожалению, это не очень производительным.

Возможно ли создать запрос, который даст результат, скажем, между двумя годами, сгруппированными по годам. Или в течение двух месяцев (в течение одного года), сгруппированные по месяцам, дням (в течение одного месяца), часам (в течение одного дня), минутам (в течение одного часа)?

EDIT: запрос для летнего перерыва:

SELECT STRFTIME('%Y', time) AS year, SUM(value) AS cumsum FROM mytable WHERE year >= STRFTIME('%Y','2005-01-01 00:00:00') AND year <= STRFTIME('%Y','2010-01-01 00:00:00') GROUP BY STRFTIME('%Y', mytable.time) ORDER BY year; 

Теперь нужна идея в течение нескольких месяцев, дней и часов.

ответ

2

Это запрос агрегации, но вам нужно извлечь год от даты:

select strftime('%Y', time) as yr, sum(value) 
from table 
group by strftime('%Y', time) 
order by yr; 
1

Привет Ниже приведен код для обоих SQL и sqlite.we может сделать группу по времени вместо того, чтобы использовать STRFTIME снова.

SQLITE: выберите STRFTIME ('% Y', время) в год, сумма (стоимость) стоимость из attendence группы по времени

SQL: выберите EXTRACT (YEAR FROM time) как год, значение суммы (значения) от посещаемости Группа за раз