powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка из таблицы остатков
10 сообщений из 10, страница 1 из 1
Выборка из таблицы остатков
    #32001593
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Есть таблица, где хранятся остатки по счетам, текущий остаток записывается только в том случае, если по счету было движение иначе используется остаток за предидущие даты. Необходимо выдать отчет - Остатки по счетам на конкретную дату, нулевые остатки в отчет не включаются.
Date ID Rest
01.01.01 1 1
01.01.01 2 1
01.01.01 3 1
03.01.01 2 0
03.01.01 3 0
04.01.01 1 0
В текущей ситуации на 1 число - остатки у всех 1, на 3 число - по счету 1 остатток 1, по счетам 2 и 3 - 0, на 4 число - по всем счетам 0.
Пишу что то типа: SELECT MAX(date) AS D, id, rest FROM TABLE1 where date<='03.01.01' GROUP BY id, rest , в результате выдаются все строки, а мне фактически нужно только 1 счет у которого остаток равен 1.
Как тут поступить, помогите, плиз!
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001597
Staple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT MAX(date) AS D, id, rest FROM TABLE1
WHERE date<='03.01.01' AND id NOT IN
(SELECT id FROM Table1 WHERE date<='03.01.01' AND rest = 0)
GROUP BY id, rest

Очень похоже на правду.
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001599
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще
SELECT MAX(date) AS D, id, rest
FROM TABLE1 where date<='03.01.01' and rest<>0
GROUP BY id, rest
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001600
Staple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гораздо проще! Но неправильно... Таким образом ты выберешь все счета, по которым остатки были до 3-его ненулевыми, не учитывая, что они могли до 3-его же и занулиться.
PS Кстати, мой вариант годится только в том случае, если эти пресловутые остатки не имеют тенденции возрождаться, и после обнуления опять ползти вверх. В бухгалтерии я, мягко говоря, не силен, да и что там у вас в конторе творится - мне невдомек, так что извини, если что не так...
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001601
Staple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гораздо проще! Но неправильно... Таким образом ты выберешь все счета, по которым остатки были до 3-его ненулевыми, не учитывая, что они могли до 3-его же и занулиться.
PS Кстати, мой вариант годится только в том случае, если эти пресловутые остатки не имеют тенденции возрождаться, и после обнуления опять ползти вверх. В бухгалтерии я, мягко говоря, не силен, да и что там у вас в конторе творится - мне невдомек, поэтому я и руководствовался собственными понятиями об остатках.
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001603
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри мой ответ, он там предпоследний.
http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=253&Idle=365&Sort=0&Order=Descend&Page=4&Session=

Если что можно вопросы по почте
С приветом Сергей
sergsuper@mail.ru
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001618
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему все предыдущие ответы были НЕ на поставленный вопрос. А на поставленный вопрос ответ совсем простой. Если я правильно вопрос понял, остатки уже получены. В вопросе также четко говорится фраза "на заданную дату", поэтому никакие max(Date) не нужны. Нужно отфильтровать ненулевые остатки. Это всего лишь select * from AnyTable where Rest>0. И все! Если автор вопроса подразумевал нечто другое, то и вопрос нужно ставить более четко.
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001622
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в вопрсе сказано, что нужны остатки на конкретную дату, но там же сказано, что текущий остаток заносится в таблицу только в том случае, если по счету была проводка, в противном случае необходимо выбирать остаток за предидущие даты.

Всех благ, Александр.
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001624
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока человеку совсем голову не задурили, напишу правильный ответ
code:

Но если много записей и желательно как-то ускорить время выполнения, то лучше последний запрос разбить на два и использовать временную таблицу:

code:

В любом случае нужен или вложенный запрос или временная таблица, т.е. простым одним select-ом не обойтись.

Кто знает как можно по другому - напишите. Буду рад посмотреть.
С приветом Сергей
...
Рейтинг: 0 / 0
Выборка из таблицы остатков
    #32001625
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой блин, какая-то фигня получилась, хотел по-красивше ниписать. Должно было быть так:

create table #ost(Date datetime, ID int, Rest int)
insert #ost
select '20000101',1, 1
union select '20000101',2, 1
union select '20000101',3, 1
union select '20000103',2, 0
union select '20000103',3, 0
union select '20000104',1, 0
go

declare @d datetime
select @d='20000103'

select o1.ID , o1.Rest
from #ost o1
where Date=(select max(Date) from #ost o2 where o2.ID=o1.ID and Date<=@d)
and o1.Rest>0



Но если много записей и желательно как-то ускорить время выполнения, то лучше последний запрос разбить на два и использовать временную таблицу:


declare @d datetime
select @d='20000103'


select ID, max(Date) d
into #d from #ost
where Date<=@d
group by ID

select o1.ID , o1.Rest
from #ost o1, #d d
where Date=d and d.ID=o1.ID
and o1.Rest>0


В любом случае нужен или вложенный запрос или временная таблица, т.е. простым одним select-ом не обойтись.

Кто знает как можно по другому - напишите. Буду рад посмотреть.
С приветом Сергей
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка из таблицы остатков
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]