Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.16;
Скачать: CL | DM;

Вниз

Помогите пожалуйста с запросом   Найти похожие ветки 

 
MZG   (2008-10-07 21:16) [0]

Здравствуйте!

Мастера, помогите пожалуйста с запросом. Есть таблица, в ней всего два поля: Дата и Сумма.
Как можно пробежаться по датам в цикле для расчета суммы за период?
Мне необходимо например: с 01.01.2008 по 01.03.2008 вычислить сумму по полю "Сумма". Подскажите пожалуйста, как это можно сделать?


 
Palladin ©   (2008-10-07 21:18) [1]

в чем затруднения?


 
MZG   (2008-10-07 21:23) [2]

Если брать рализацию select summa from MyTable where data = дата - то получается без проблем. Я не могу понять, как правильно брать в цикл.

Тока щас в голову пришла мысль
select summa from MyTable where (data = 01.01.2008) and (data<=01.03.2008).

Мастера, что не так? Где и как копаться?


 
Anatoly Podgoretsky ©   (2008-10-07 21:32) [3]

> MZG  (07.10.2008 21:23:02)  [2]

sum(summa)


 
MZG   (2008-10-07 21:36) [4]

Анатолий, я про суммирование знаю. Спасибо за помощь.
Я не могу указать интервал дастю. Мне нужно взять за 3 мес, за 6 мес и за год. Подскажите пожалуйста!
C SQL начинаю дружить, но вот сталкнулся с тким вопросом и не знаю что и как дальше.......:(


 
palva ©   (2008-10-07 22:09) [5]

Для интервала можно использовать BETWEEN
А вот как задать в команде дату - трудный вопрос. Вам придется рассказать какой сервер вы используете.


 
MZG   (2008-10-07 22:19) [6]

Я просто на Delphi с использованием стандартных компонентов SQL


 
palva ©   (2008-10-07 22:36) [7]

Тогда логичнее использовать параметры и тип делфи TDateTime.
Вообще как-то странно интересоваться SQL и не пробовать на нем работать.


 
Германн ©   (2008-10-08 00:52) [8]


> MZG   (07.10.08 22:19) [6]
>
> Я просто на Delphi с использованием стандартных компонентов
> SQL
>

"Туман, туман. Сплошная пелена."
(с) Хорошая песня из хорошего фильма


> palva ©   (07.10.08 22:09) [5]
>
> Для интервала можно использовать BETWEEN

Новичку очень трудно указать интервал дат для BETWEEN. Последний день месяца.


 
Alex7   (2008-10-08 07:23) [9]

Текст запроса: SELECT SUM(summa) FROM MyTable where (data BETWEEN :DateBegin AND :DateEnd)

Открытие датасета:

var j:Integer;
d1, d2 :TDateTime;
begin
DateSeparator:=".";
if TryStrToDate(Edit1.Text,d1)
   and TryStrToDate(Edit2.Text,d2) then
 with MyADODataSet do begin
  for j:=0 to 1 do Parameters[j].DataType := ftDate;
  Parameters[0].Value := d1;
  Parameters[1].Value := d2;
  Open;
 end;


 
Василий Жогарев ©   (2008-10-08 07:59) [10]

SELECT     M, SUMMA
FROM         (SELECT     Y, M, SUM(SUMMA) AS SUMMA
                      FROM          (SELECT     YEAR(DATA) AS Y, MONTH(DATA) AS M, DAY(DATA) AS D, SUMMA
                                              FROM          Table1) AS t
                      GROUP BY Y, M) AS d
WHERE     (Y = 2008) AND (M >= 1 AND M <= 3)
:)))

_________________________________________________________________
WinXP, MS SQL 2005


 
Правильный$Вася   (2008-10-08 12:01) [11]


> Василий Жогарев ©   (08.10.08 07:59) [10]

извращение какое-то
особенно после того, как автор указал, что у него явно не мскуль
зачем выпендриваться?

> where (data = 01.01.2008) and (data<=01.03.2008)

это может дать только 1 день, 1 января, т.к. дата не может быть равна другому дню и одновременно равна 1 января
так что ставь либо BETWEEN, либо <= с обеих сторон


 
MZG   (2008-10-08 22:23) [12]

Вечера доброго!

Ребят, извиняй, но чего-то я не понимаю в следующем коде, приведенного Василием.


SELECT M, SUMMA
FROM    (SELECT     Y, M, SUM(SUMMA) AS SUMMA
FROM    (SELECT     YEAR(DATA) AS Y, MONTH(DATA) AS M, DAY(DATA) AS D, SUMMA  FROM  Table1) AS t
GROUP BY Y, M) AS d WHERE     (Y = 2008) AND (M >= 1 AND M <= 3)


Этот код я поместил в Query1 и на исполнении ругается на строку 2, т.е.
FROM (SELECT     Y, M, SUM(SUMMA) AS SUMMA

Напомню, что мне нужно научиться реализовывать запрос - подсчет суммы за указанный перод. Ради примера взял интервал на квартал - 3 месяца.

Помогите пожалуйста, разобраться :)


 
Johnmen ©   (2008-10-08 22:36) [13]

Ты вообще читаешь, что тебе говорят?
Ну кроме бреда от Василия?


 
MZG   (2008-10-08 23:07) [14]

Вроде получилось :)
Запрос с использованием OR
select sum(summa) from mytable where (data<=01.01.2008) or (03.01.2008)

Всё работает как часы!!!! :)))


 
Германн ©   (2008-10-09 00:10) [15]


> Вроде получилось :)
> Запрос с использованием OR
> select sum(summa) from mytable where (data<=01.01.2008)
> or (03.01.2008)
>
> Всё работает как часы!!!! :)))
>

Не верю!


 
Правильный$Вася   (2008-10-09 11:34) [16]


> Всё работает как часы!!!!

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



Страницы: 1 вся ветка

Текущий архив: 2008.11.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
2-1222891466
Александр325
2008-10-02 00:04
2008.11.16
Ошибка при определении процедуры


15-1221386389
@!!ex
2008-09-14 13:59
2008.11.16
Почувствуй разницу...


15-1221631697
infom
2008-09-17 10:08
2008.11.16
Найти угол между векторами.


15-1221592684
Spartak
2008-09-16 23:18
2008.11.16
Delphi


15-1221485083
stas
2008-09-15 17:24
2008.11.16
Драйвер типа RAM диска