Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Условие отбора  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Постараюсь описать ситуацию, у меня есть дата и она попадает под два расхода, то бишь она используется 2 раза а не один раз, как мне реализовать умный отбор что бы если дата (В) больше первой даты и используется то что бы больше ее не отбирали.

http://i.imgur.com/ECred2Y.png (1 столбец datediff)

ID Приход Расход (В) Кредитование
1 05/18 05/23 -5
1 05/18 06/13 21
26 июн 17, 14:30    [20590754]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Pabl0,

Почему не отбирали? В карман кладёте половину расходов, что ли?
26 июн 17, 14:48    [20590824]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите как написать курсор

Который бы брал все предыдущие записи и суммировал.

http://i.imgur.com/Qlgojy8.png

http://i.imgur.com/6WdLYOs.png

declare SumDate cursor FOR
SELECT EstimateID, Borned, Price
FROM #Temp T

open SumDate
fetch from SumDate

while @@fetch_status = 0
BEGIN

--SELECT * FROM #temp

/* SELECT EstimateID, Borned, SUM(Price) AS Price
FROM #Temp
GROUP BY EstimateID, Borned */

fetch next from SumDate
end

close SumDate
deallocate SumDate

DROP TABLE #SumTable, #Temp
26 июн 17, 17:34    [20591572]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Pabl0
Member

Откуда:
Сообщений: 265
declare SumDate cursor FOR
SELECT EstimateID, Borned, Price 
FROM #Temp T

open SumDate 
fetch from SumDate

while @@fetch_status = 0
BEGIN	

--SELECT * FROM #temp	

/* SELECT EstimateID, Borned, SUM(Price) AS Price 
FROM #Temp
GROUP BY EstimateID, Borned */

fetch next from SumDate
end 

close SumDate
deallocate SumDate 

DROP TABLE #SumTable, #Temp
26 июн 17, 17:35    [20591580]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
Pabl0,
Нарастающий итог:

https://www.sql.ru/faq/faq_topic.aspx?fid=125
26 июн 17, 17:36    [20591584]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Владислав Колосов
Pabl0,
Нарастающий итог:

https://www.sql.ru/faq/faq_topic.aspx?fid=125
Зачем эта ссылка, если скорее всего можно воспользоваться SUM()OVER(ORDER BY).
Тем более, суммирование в основном запросе по ссылке выполняется в негарантированном порядке.
26 июн 17, 18:41    [20591814]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7754
iap,
SUM()OVER(ORDER BY) - это и есть один из вариантов подсчета нарастающего.
26 июн 17, 19:16    [20591923]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Владислав Колосов
iap,
SUM()OVER(ORDER BY) - это и есть один из вариантов подсчета нарастающего.
Но рассматривается по данной вами ссылке разве что в комментариях,
да и то не уверен (читать всё сейчас лень).
26 июн 17, 19:43    [20591998]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Я воспользовался те что вы посоветовали, теперь у меня выводится сумма предыдущих строк.

Единственный момент мне нужно теперь считать дату через datediff я думаю, тип 11.30 - 12.07 = ~ 8 собственно для этого я и хотел через курсор делать.


http://i.imgur.com/cScv8Wi.png
27 июн 17, 09:57    [20592887]     Ответить | Цитировать Сообщить модератору
 Re: Условие отбора  [new]
Pabl0
Member

Откуда:
Сообщений: 265
		SELECT EstimateID, Borned, Price,
		
		(
		SELECT SUM(T1.Price)
		FROM #Temp T1
		WHERE T1.Borned <= T2.Borned and T1.EstimateID = T2.EstimateID
		) Total,
		
		(
		SELECT TOP 1 DATEDIFF(d,T2.Borned, T1.Borned)
		FROM #Temp T1
		WHERE T1.Borned <= T2.Borned and T1.EstimateID = T2.EstimateID
		) CountDay
		INTO #Result
		FROM #Temp T2 
		
		
		SELECT * 
		FROM #Result R
27 июн 17, 10:05    [20592909]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить