![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не выполняется SQL [FireBird 1.5]
DelphiN! © (2008-02-22 07:10:00)Написал SQL :
SELECT DISTINCT(CAST(TIME_ AS DATE)) DATA,SUM(SUMM_) TEKUSHAYA_SUMMA,
(SELECT SUM(SUMM_) FROM CASEBASE WHERE (TIME_ > MAIN.TIME_-7)and(TIME_ < MAIN.TIME_)
and(prim_ <> 'Login activated')and (prim_ <> 'Login deactivated'))
Summa_za_poshliy_period
FROM CaseBase MAIN WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.10.2007')
and (prim_ <> 'Login activated') and (prim_ <> 'Login deactivated')
GROUP BY 1
ORDER BY 1
Однако при попытке выполнения FireBird возвращает мне ошибку :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Если я убираю условия выделенные жирным, запрос выполняется без ошибок, в чем моя ошибка?
Dialect 3
Sergey13 (2008-02-22 11:22:00) [21]> [8] DelphiN! (22.02.08 10:48)
> в первом столбце - дату,
> во втором - выручку за эту дату*,
> а в третьем - выручку недельной давности от даты в 1ом столбце
Первые 2 столбца вопросов ен вызывают. Но вот третий выходит за границы моего воображения - что-то я не могу придумать для чего это.
Johnmen (2008-02-22 11:15:00) [22]
> поле TIME_ хранится в базе как TIMESTAMP
> в базе данных значения в поле TIME_ хранятся в виде 01.
> 01.2008 13:02:01
С человеком, который упорно не желает учить букварь, здесь вряд ли будут разговаривать.
www (2008-02-22 10:51:00) [23]
> za_ poshliy_period
оно!
DelphiN! (2008-02-22 10:48:00) [24]Вообще смысл запроса таков :
Есть база данных с выручкой, в базе данных значения в поле TIME_ хранятся в виде 01.01.2008 13:02:01 мне необходимо вывести
в первом столбце - дату,
во втором - выручку за эту дату*,
а в третьем - выручку недельной давности от даты в 1ом столбце
* Выручка за дату 02.01.2008 это промежуток с 02.01.2008 00:00:00 - 02.01.2008 23:59:59
Тоесть в результате таблица должны выглядеть следующим образом :
01.02.2008 50 000 60 000
02.02.2008 80 000 40 000
............... ........ .........
DelphiN! (2008-02-22 10:42:00) [25]
> Sergey13 © (22.02.08 09:47) [6]
Первое поле это представление поля TIME_ как DATE. На самом деле поле TIME_ хранится в базе как TIMESTAMP.
В таком случае почему FireBird не даёт мне использовать поле TIME_ в под запросе?
Sergey13 (2008-02-22 09:47:00) [26]> [5] DelphiN! (22.02.08 09:26)
> А как тогда добавить в GROUP BY поле TIME_ чтобы его можно
> было использовать в под запросе и одновременно оставить
> группировку по первому полю?
А "по первому полю" и "поле TIME_" это по разным полям?
DISTINCT тебе зачем?
DelphiN! (2008-02-22 09:26:00) [27]Действительно, запрос не выводит уникальные даты в 1ом поле:(
А как тогда добавить в GROUP BY поле TIME_ чтобы его можно было использовать в под запросе и одновременно оставить группировку по первому полю?
Sergey13 (2008-02-22 09:22:00) [28]> [3] DelphiN! (22.02.08 09:01)
> Так будет верно?
Ты на кофейной гуще гадаешь? Запусти да проверь. Мой прогноз - не верно.
DelphiN! (2008-02-22 09:01:00) [29]
> Sergey13 © (22.02.08 09:00) [2]
SELECT DISTINCT(CAST(TIME_ AS DATE)) DATA,SUM(SUMM_) TEKUSHAYA_SUMMA,
(SELECT SUM(SUMM_) FROM CASEBASE WHERE (TIME_ > MAIN.TIME_-7)and(TIME_ < MAIN.TIME_)
and(prim_ <> 'Login activated')and (prim_ <> 'Login deactivated'))
Summa_za_poshliy_period
FROM CaseBase MAIN WHERE (TIME_ > '13.08.2007')and(TIME_ < '14.10.2007')
and (prim_ <> 'Login activated') and (prim_ <> 'Login deactivated')
GROUP BY 1,TIME_
ORDER BY 1
Так будет верно?
Sergey13 (2008-02-22 09:00:00) [30]> [0] DelphiN! © (22.02.08 07:10)
> в чем моя ошибка?
В том, что нахватавшись верхов, ты не понимаешь смысла того, что пишешь.
DISTINCT, GROUP BY - как по твоему это должно сочетаться? Твой подзапрос - это агрегат или поле по которому надо агрегировать?
ЮЮ (2008-02-22 08:23:00) [31]1) отформатируй
2) если есть GROUP BY, то только агрегатнее функции и поля, перечисленные в GROUP BY
З.Ы. Сосояние не позволяет врубится в смысл запроса, написанного в таком стиле.