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

Откуда:
Сообщений: 43
Здравствуйте,

есть таблица с датами и суммами транзакций.

create table #tr (RequestDate DateTime, Amount float)  
insert into #tr
values ( '8/31/2010 7:29',  20),
('8/31/2010 7:59',  25),
('9/1/2010 14:36',  40),
('9/1/2010 19:11',  40),
('9/2/2010 5:36',  40),
('9/6/2010 17:46',  25)


Как можно найти день, когда за 24 часа было сделано транзакций на сумму больше чем 100? То есть в данном примере есть такой день - 9.02.2010, так как с 5:36 9.01.2010 до 5.36 9.02.2010 в сумме транзакций на 120

Пока приходит в голову только группировка по дням, но нужно найти 24 часа не только с 00:00 до 00:00

select convert (varchar(10), RequestDate,121) as Date, sum(Amount) as Sum
from #tr
group by convert (varchar(10), RequestDate,121)
having sum(Amount)>=100
19 ноя 20, 12:54    [22235251]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34241
Блог
Luna17,

самоджойн с sum
19 ноя 20, 13:11    [22235268]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
Luna17,

Так день или интервал в 24 часа?

упд. Однажды и в sql server сделают наконец-то нормальный range between interval ...

Сообщение было отредактировано: 19 ноя 20, 13:08
19 ноя 20, 13:12    [22235269]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
env,
мне нужно знать день, когда было в течение 24 достигнута граница 100. Т.е 24 часа могут начинаться в любой момент, а день нужно знать для статистики, чтобы посмотреть когда больше достигают этой черты
19 ноя 20, 13:36    [22235295]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
env, в общем неважно, мне главное найти вот эти 24 часа, сколько таких было
19 ноя 20, 13:37    [22235297]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
fkthat
Member

Откуда:
Сообщений: 3840
Luna17
найти день

Luna17
найти 24 часа не только с 00:00 до 00:00

Ты уж определись. Если у тебя 24 часа это с полудня среды до полудня четверга - то это какой "день" будет?
19 ноя 20, 13:37    [22235298]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
Критик,

можете подробней написать, как это с sum?
19 ноя 20, 13:38    [22235300]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
fkthat, четверг
19 ноя 20, 13:39    [22235302]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34241
Блог
Luna17,

для каждой записи джойните в интервале 24 часа назад или вперед (сами смотрите),
для наджойненного считаете sum,
применяете условие в having

всё, куда уж подробнее...

Сообщение было отредактировано: 19 ноя 20, 13:40
19 ноя 20, 13:44    [22235311]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
godsql
Member

Откуда:
Сообщений: 134
Luna17,
начиная с этой записи, в течении 24 часов было 120
select 
t2.RequestDate, t2.Amount, tp.suma from #tr t2
cross apply ( 
	select sum(t3.Amount) as suma 
		from #tr t3 
			where t3.RequestDate>=t2.RequestDate and t3.RequestDate<= dateadd(hh,24,t2.RequestDate)
		) tp
where tp.suma =120
19 ноя 20, 13:46    [22235315]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
fkthat
Member

Откуда:
Сообщений: 3840
Luna17
можете подробней написать, как это с sum?

Можем.

+
declare @trans table (
  dt datetime not null,
  amount money not null
)

insert @trans
  select '1/1/2020 10:43', 10.23
  union
  select '1/1/2020 23:07', 100
  union
  select '1/2/2020 9:19', 980
  union
  select '1/3/2020 15:13', 100500
  union
  select '9/8/1973 9:00', 777

;with
time_points as (select distinct dt from @trans),
aggregated_sums as (
select time_points.dt, sum(t.amount) amount from
  time_points cross join @trans t
  where t.dt between dateadd(HH, -24, time_points.dt) and time_points.dt
  group by time_points.dt
  having sum(t.amount) > 1000
)
select cast(dt as date) from aggregated_sums
19 ноя 20, 14:03    [22235332]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
Критик, спасибо, получилось)
19 ноя 20, 14:35    [22235376]     Ответить | Цитировать Сообщить модератору
 Re: Как найти день, когда за 24 часа была потрачена определенная сумма  [new]
Luna17
Member

Откуда:
Сообщений: 43
fkthat,
спасибо!
19 ноя 20, 14:36    [22235377]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить