Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 17:46   #1
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию Возможен ли такой SQL запрос?

Таблица имеет такую структуру:
Start |Duration |InTotal |OutTotal
25.07.2012 20:54:31 |00:01:35 |135301 |36413
26.07.2012 9:59:02 |00:56:41 |29150413 |946207
и т.д.
Мне необходимо найти сумму по третьей и четвертой колонкам группируя записи по дням, месяцам и годам. С SQL знаком поверхностно. Может быть он позволяет решить такую задачу, или проще своим кодом сделать сортировку?

Последний раз редактировалось NaumOff; 23.09.2012 в 18:43.
NaumOff вне форума Ответить с цитированием
Старый 23.09.2012, 18:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Возможен, только для разных СУБД он будет по разному выглядеть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.09.2012, 18:20   #3
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию

Аватар,
Это обнадеживает. Я использую SQLLite.
SELECT Start,Duration,SUM(InTotal),SUM(Out Total) FROM Stata group by Start ....
Осталось только додуматься как это поле Start разделить на дни, месяцы и годы.
Мне кажется зря я дату записывал в таком формате, надо было yyyy-mm-dd. Сразу же возникли проблемы с сортировкой.
UPD:
Код:
SELECT SUM( InTotal ),
       SUM( OutTotal )
  FROM Stata
WHERE Start LIKE '%25.07.2012%'
В LIKE подсовывать нужную дату. Один черт эту дату надо выводить юзеру. Получается 365 запросов при годовой статистике. Наверно не страшно). Буду думать дальше.

Последний раз редактировалось NaumOff; 23.09.2012 в 19:04.
NaumOff вне форума Ответить с цитированием
Старый 23.09.2012, 21:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

365 запросов?! Это зачем?

думаю, что годовой запрос будет выглядеть примерно так:
Код:
SELECT SUM( InTotal ),
       SUM( OutTotal ),
       Start 
  FROM Stata
  where strftime('%Y', Start) = 2012
  GROUP BY Start
  order by Start
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2012, 21:31   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тут групприровка по Start не прокатит. Время мешать будет. Дату в Sqlite можно функцией date выдернуть и по результату группировать. Sqlite не пользуюсь, могу и ошибиться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.09.2012, 22:13   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Тут групприровка по Start не прокатит. Время мешать будет.
ага. согласен. надо выдёргивать дату (через date()) и группировать уже по ней...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2012, 23:18   #7
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию

Serge_Bliznykov,
ваш запрос не прошел.
Годовой запрос делается так:
Код:
SELECT SUM( InTotal ),
       SUM( OutTotal )
  FROM Stata
WHERE Start LIKE '%2012%'
Не знаю правильно ли так делать, но работает.
Если есть статистика за год, то чтобы вывести суммы по дням надо сделать поиск аналогичным запросом по каждой дате, потому 365 запросов.
По месяцам аналогично-12 запросов. Ничего лучше пока не придумал.
Скачал "Введение в SQL" Грабера, буду изучать.
NaumOff вне форума Ответить с цитированием
Старый 24.09.2012, 08:41   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ТС, какие 365 запросов? За каждый день года, по которому были операции
Код:
SELECT U.Date1,SUM(U.InTotal),SUM(U.OutTotal)
  FR0M (SELECT date(Start) as Date1,InTotal,OutTotal FROM Stata WHERE strftime(%Y,Start)='2012') AS U
  GROUP BY U.Date1
  ORDER BY U.Date1
За каждый месяц года
Код:
SELECT U.Month1,SUM(U.InTotal),SUM(U.OutTotal)
  FR0M (SELECT strftime(%m,Start) as Month1,InTotal,OutTotal FROM Stata WHERE strftime(%Y,Start)='2012') AS U
  GROUP BY U.Month1
  ORDER BY U.Month1
С кавычками может и не прав. Да, интересно, WHERE Start LIKE '%25.07.2012%' работает в SQLITE?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.09.2012 в 09:05.
Аватар вне форума Ответить с цитированием
Старый 24.09.2012, 10:43   #9
NaumOff
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 48
По умолчанию

Ругается на ваш запрос:
Цитата:
near "%": syntax error
WHERE Start LIKE '%25.07.2012%' работает, я же так и предлагал делать запросы, потому 365 - поиск каждой даты по отдельности. Но это, думаю, решение через попу).
NaumOff вне форума Ответить с цитированием
Старый 24.09.2012, 11:10   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
кавычками может и не прав. Да, интересно, WHERE Start LIKE '%25.07.2012%' работает в SQLITE?
думаю, что поле Start - ТЕКСТОВОЕ (символьное, оно же char, оно же varchar). Поэтому и LIKE с ним работает, и пример с группировкой по дням - НЕ работает!
Если это так - то это однозначно большой "косяк" в проектировании структуры.
Я бы рекомедовал это исправить, если возможно, конечно.


Цитата:
Сообщение от NaumOff
Если есть статистика за год, то чтобы вывести суммы по дням надо сделать поиск аналогичным запросом по каждой дате, потому 365 запросов
Это очень "криво". Поэтому мы наперебой с Аватар'ом и пытаемся Вам объяснить, как 365 запросов (или 12 - если помесячно) можно заменить одним запросом с группировкой по нужному элементу.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему такой код возможен и сколько выделится памяти? Gtx541 Общие вопросы C/C++ 5 16.06.2010 19:38
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Как делается такой запрос\форма kakawkin Microsoft Office Access 1 22.04.2010 20:07
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Возможен такой скрипт ??? sasha14486 PHP 4 15.06.2009 10:58