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

Откуда:
Сообщений: 2
Доброго времени суток!
Есть некая таблица. Клиент, дата сделка, время сделки, сумма

CREATE TABLE Test_3 (client_id VARCHAR(30), date_app DATE, time_app TIME, Sale int);
INSERT INTO Test_3 values
('002', '20170703', '10:23', 24546),
('002', '20170703', '12:43', 5564),
('002', '20170910', '19:57', 3456),
('002', '20171017', '14:02', 65343),
('003', '20170424', '16:23', 34346),
('003', '20170602', '12:10', 45645),
('003', '20170602', '09:10', 56454)

Необходимо: по каждому клиенту показать сумму всех сделок, сред сумму и количество. + Дата и время ПО ПЕРВОЙ СДЕЛКЕ.

Я вижу это так:

Select t1.client_id, t2.date_app, t2.time_app, sum(t1.sale) as 'sum', avg(t1.sale) as 'avg', count(t1.sale) as 'count'
From Test_3 as t1 Left Join
(Select t0.*
From (select *,
ROW_NUMBER() OVER (Partition by client_id Order by date_app, time_app) as 'number'
From test_3) as t0
Where t0.number=1) as t2
ON t2.client_id = t1.client_id
Group by t1.client_id, t2.date_app, t2.time_app

Собственно сам вопрос, а можно ли это написать каким то другим способом ?
15 сен 19, 16:12    [21971194]     Ответить | Цитировать Сообщить модератору
 Re: Показать дату и время по первой сделке  [new]
vikkiv
Member

Откуда: London
Сообщений: 2702
artem_ne_artem,

declare @t TABLE (c VARCHAR(30), d DATE, t TIME, q int)
INSERT INTO @t values 
('002', '20170703', '10:23', 24546),
('002', '20170703', '12:43', 5564), 
('002', '20170910', '19:57', 3456), 
('002', '20171017', '14:02', 65343), 
('003', '20170424', '16:23', 34346),
('003', '20170602', '12:10', 45645),
('003', '20170602', '09:10', 56454)
select c cl,sum(q)sum,avg(q)avg,count(1)count
--,min(cast(d as datetime)+cast(t as datetime))dt
,CONVERT(date,min(cast(d as datetime)+cast(t as datetime)),101)date
,CONVERT(time,min(cast(d as datetime)+cast(t as datetime)),108)time
from @t group by c order by 1
15 сен 19, 16:58    [21971204]     Ответить | Цитировать Сообщить модератору
 Re: Показать дату и время по первой сделке  [new]
vikkiv
Member

Откуда: London
Сообщений: 2702
101 и 108 естественно лишние
15 сен 19, 17:02    [21971205]     Ответить | Цитировать Сообщить модератору
 Re: Показать дату и время по первой сделке  [new]
artem_ne_artem
Member

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

Спасибо, это конечно намного удобнее)
15 сен 19, 17:11    [21971208]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить