![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL выборка из таблицы с датами последнего изменения [D5, MSSQL]
WG © (2006-05-30 09:21:00)Мастера, не пинайте, знаю, что с такими вопросами обычно отправляют на RTFM, но книжки под рукой нет и вопрос срочный.
Есть некая база, содержащая следующие поля: "дебитор", "признак дебитора", "сумма", "дата последнего изменения". Задача - построить по признаку дебитора таблицу типа "дата", "сумма по всем дебиторам". Первое что приходит в голову - выбрать дебиторов по признаку, потом циклом тупо перебрать даты и дебиторов и просуммировать. Но есть подозрение, что все это с полпинка решается еще на уровне SELECT. Не мог бы кто подтвердить или опровергнуть это подозрение ?
WG (2006-05-30 12:50:00) [1]2 ЮЮ
Сэнкс ! Буду пробовать.
ЮЮ (2006-05-30 10:56:00) [2]
SELECT SUM(Debits.Debt) FROM
(
SELECT Debtor, Max(ChangeDate) ChangeDate
FROM Debits
WHERE (ChangeDate <= @OnDate) AND (IsDebtor = 1)
GROUP BY Debtor
) lastChange /* дата последней корректировки */
JOIN Debits ON
(lastChanged.Debtor = Debits.Debtor) AND
(lastChanged.ChangeDate = Debits.ChangeDate)
/* не должно быть два изменения на одну дату у одного и того же дебитора */
Где "дебитор", "признак дебитора", "сумма", "дата последнего изменения".
Debtor IsDebtor Debt ChangeDate
WG (2006-05-30 09:56:00) [3]
> Пусть например "дата последнего изменения" = 02.02.06
> Должна ли эта запись суммироваться для 01.02.06, 02.02.
> 06, 03.02.06 ?
Уточню - в 03.02.06 она суммируется только если нет записи с датой 03.02.06.
WG (2006-05-30 09:55:00) [4]
> И какой интервал "дата" ? от 0 до GetDate() ?
Ну в общем да.
> И какое соотношение между "дата последнего изменения" и
> "дата" ?.
Произвольный. Может вообще последний раз дебиторка менялась два года назад.
> Пусть например "дата последнего изменения" = 02.02.06
> Должна ли эта запись суммироваться для 01.02.06, 02.02.
> 06, 03.02.06 ?
Должна суммироваться в 02.02.06 и 03.02.06. На 01.02 будет искаться какое-нибудь ближайшее, 25.01, к примеру.
> Что именно хочешь получить в "сумма
> по всем дебиторам" для конкретного значения "дата"?
Именно сумму по всем дебиторам с заданным признаком на данную дату.
ЮЮ (2006-05-30 09:36:00) [5]
> построить по признаку дебитора таблицу типа "дата", "сумма
> по всем дебиторам".
И какой интервал "дата" ? от 0 до GetDate() ?
И какое соотношение между "дата последнего изменения" и "дата" ?.
Пусть например "дата последнего изменения" = 02.02.06
Должна ли эта запись суммироваться для 01.02.06, 02.02.06, 03.02.06 ?
Что именно хочешь получить в "сумма
> по всем дебиторам" для конкретного значения "дата"?
Ega23 (2006-05-30 09:23:00) [6]Group By + F1