Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите с выборкой
|
|||
|---|---|---|---|
|
#18+
Имеются таблица со счетами (Acc): ID DATEOPEN DATECLOSE 1 01.01.2001 03.12.2001 2 NULL NULL 3 02.12.2001 NULL 4 01.12.2001 NULL 5 01.01.2001 NULL и таблица с остатками на счетах (rest). Причем остатки хранятся только за те даты, когда остаток на счете менялся: ACC_ID DATE REST 1 01.12.2001 1000.0000 1 02.12.2001 2000.0000 2 02.12.2001 2000.0000 4 02.12.2001 2000.0000 1 03.12.2001 3000.0000 2 03.12.2001 3000.0000 3 03.12.2001 3000.0000 И есть какая-то дата BalDate, переданная в качестве параметра. Результат выборки должен вернуть остатки на всех счетах за указанную BalDate, при условии что ACC.DATEOPEN <= BalDate и ACC.DATECLOSE >= BalDate. Например: если BalDate=01.12.2001, то ACC_ID DATEOPEN DATECLOSE DATE REST 1 01.01.2001 03.12.2001 01.12.2001 1000.0000 2 NULL NULL NULL NULL 4 01.12.2001 NULL NULL NULL 5 01.12.2001 NULL NULL NULL если BalDate=02.12.2001, то ACC_ID DATEOPEN DATECLOSE DATE REST 1 01.01.2001 03.12.2001 02.12.2001 2000.0000 2 NULL NULL 02.12.2001 2000.0000 3 02.12.2001 NULL NULL NULL 4 01.12.2001 NULL 02.12.2001 2000.0000 5 01.12.2001 NULL NULL NULL если BalDate=03.12.2001, то ACC_ID DATEOPEN DATECLOSE DATE REST 1 01.01.2001 03.12.2001 03.12.2001 3000.0000 2 NULL NULL 03.12.2001 3000.0000 3 02.12.2001 NULL 03.12.2001 3000.0000 4 01.12.2001 NULL 02.12.2001 2000.0000 5 01.12.2001 NULL NULL NULL если BalDate=04.12.2001, то ACC_ID DATEOPEN DATECLOSE DATE REST 2 NULL NULL 03.12.2001 3000.0000 3 02.12.2001 NULL 03.12.2001 3000.0000 4 01.12.2001 NULL 02.12.2001 2000.0000 5 01.12.2001 NULL NULL NULL написал такой запрос: SELECT Acc.id, Acc.dateopen, Acc.dateclose, Rest.date, Rest.rest FROM Acc LEFT OUTER JOIN Rest ON Acc.id = Rest.acc_id WHERE (Acc.dateopen IS NULL OR Acc.dateopen <= @BalDate) AND (Acc.dateclose IS NULL OR Acc.dateclose >= @BalDate) AND (Rest.date IS NULL OR Rest.date <= @BalDate) GROUP BY Acc.id - в результат попадают все счета кроме тех, у которых есть соответствующие записи в таблице REST но минимальная дата больще BalDate. Подскажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2002, 12:52 |
|
||
|
Помогите с выборкой
|
|||
|---|---|---|---|
|
#18+
Так что-ли ? create table #acc(ID int, DATEOPEN datetime, DATECLOSE datetime) insert into #acc values(1, '20010101', '20011203') insert into #acc values(2, NULL, NULL) insert into #acc values(3, '20011202', NULL ) insert into #acc values(4, '20011201', NULL ) insert into #acc values(5, '20010101', NULL ) create table #rest(ACC_ID int, DATE datetime, REST decimal(10,2)) insert into #rest values(1, '20011201', 1000.0000) insert into #rest values(1, '20011202', 2000.0000) insert into #rest values(2, '20011202', 2000.0000) insert into #rest values(4, '20011202', 2000.0000) insert into #rest values(1, '20011203', 3000.0000) insert into #rest values(2, '20011203', 3000.0000) insert into #rest values(3, '20011203', 3000.0000) declare @baldate datetime set @baldate = '20011204' select a.* , (select top 1 date from #rest b where b.acc_id = a.id and b.date <= @baldate order by date desc) as date, (select top 1 rest from #rest b where b.acc_id = a.id and b.date <= @baldate order by date desc) as rest from #acc a where isnull(a.dateopen, '19000101') <= @BalDate and isnull(a.dateclose, '99991231') >= @BalDate drop table #rest drop table #acc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2002, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3517&tid=1824420]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 317ms |

| 0 / 0 |
