Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 10 сообщений из 10, страница 1 из 1
29.10.2002, 14:01:02
    #32062704
Homutke
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Есть таблица продаж за период времени (Kol -количество, Время продажи типа text)

Kol Time
12 00:01
3 00:20
1 01:01
2 01:31

можно ли одним запросом получить результат продаж за промежуток времени кратный 30 минутам, вида

Kol Prom (промежуток кратно 30 минутам)
15 1 (00:01-00:30)
0 2 (00:31-01:00)
1 3 (01:01-01:30)
2 4 (01:31-02:00)
...
Рейтинг: 0 / 0
29.10.2002, 14:11:17
    #32062710
Александр Азаркович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
ну почему же время продажи типа text???
...
Рейтинг: 0 / 0
29.10.2002, 14:34:01
    #32062727
Homutke
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
хорошо пусть будет time
...
Рейтинг: 0 / 0
29.10.2002, 14:35:07
    #32062729
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
time?!
...
Рейтинг: 0 / 0
29.10.2002, 14:36:45
    #32062731
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
А может лучше varbinary ?
...
Рейтинг: 0 / 0
29.10.2002, 14:38:11
    #32062734
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Может и лучше. Такий хотя бы есть. 8)
...
Рейтинг: 0 / 0
29.10.2002, 14:38:34
    #32062735
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
"Такий" 8))
...
Рейтинг: 0 / 0
29.10.2002, 14:38:58
    #32062736
Homutke
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
DataTime?!
...
Рейтинг: 0 / 0
29.10.2002, 14:52:10
    #32062742
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Вот пример как я делаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 /* тестовая таблица */ 
if exists (select * 
		from sysobjects 
		where name = 'Quik_Statistics' and
			type = 'U')
begin
	drop table Quik_Statistics
end
create table Quik_Statistics
(
	ID_Quik_Statistic integer identity not null,  -- ид записи
 
	Delta_Spred integer not null,  -- количество
 
	Spred_DateTime datetime not null,  -- время
 
	constraint pk_Quik_Statistics primary key (Spred_DateTime)
)
 /* тестовый значения */ 
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  10 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  20 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  30 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  40 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  50 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  60 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  70 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  80 , GetDate()))
insert into Quik_Statistics (Delta_Spred, Spred_DateTime)
values ( 1 , dateadd(mi,  90 , GetDate()))
go
 /* тестовый запрос */ 
select 'Summa' = sum(q1.Delta_Spred), 'Begin Perion' = q1.Spred_DateTime, 'End Period' = max(q2.Spred_DateTime)
from Quik_Statistics as q1 inner join Quik_Statistics as q2 on
	(q2.Spred_DateTime >= q1.Spred_DateTime and
	q2.Spred_DateTime <= dateadd(mi,  30 , q1.Spred_DateTime) and
	q1.ID_Quik_Statistic <> q2.ID_Quik_Statistic)
group by q1.Spred_DateTime
go
drop table Quik_Statistics
result:
Summa       Begin Perion                                           End Period                                             
 ----------- ------------------------------------------------------ ------------------------------------------------------ 
 
 3             2002 - 10 - 29   15 : 04 : 51 . 140                                  2002 - 10 - 29   15 : 34 : 51 . 140 
 3             2002 - 10 - 29   15 : 14 : 51 . 140                                  2002 - 10 - 29   15 : 44 : 51 . 140 
 3             2002 - 10 - 29   15 : 24 : 51 . 140                                  2002 - 10 - 29   15 : 54 : 51 . 140 
 3             2002 - 10 - 29   15 : 34 : 51 . 140                                  2002 - 10 - 29   16 : 04 : 51 . 140 
 3             2002 - 10 - 29   15 : 44 : 51 . 140                                  2002 - 10 - 29   16 : 14 : 51 . 140 
 3             2002 - 10 - 29   15 : 54 : 51 . 140                                  2002 - 10 - 29   16 : 24 : 51 . 140 
 2             2002 - 10 - 29   16 : 04 : 51 . 140                                  2002 - 10 - 29   16 : 24 : 51 . 140 
 1             2002 - 10 - 29   16 : 14 : 51 . 140                                  2002 - 10 - 29   16 : 24 : 51 . 140 

Соответственно Ваше поле текст надо переконвертить в datetime. Дело в том, что text в datetime не конвертится, поэтому сначала надо в varchar а потом в datetime. Можно конечно делать это по ходу, но лучше, по моему, таблицу сделать пригодной для хранения дат. Тип text предназначен для другого. Тип datetime дает возможность прибавлять минуты к дате.
...
Рейтинг: 0 / 0
29.10.2002, 15:12:40
    #32062754
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Ку?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
declare
  @dt1 datetime,
  @dt2 datetime
select @dt1 = '20020101'  --convert(datetime, 0x00000000)
 
select @dt2 = DateAdd(n,  20 , @dt1)
if object_id('tempdb..#tmp') >  0  drop table #tmp
create table #tmp (
[id] int not null identity( 1 , 1 ) primary key nonclustered,
dt datetime not null,
val int not null
)

while @dt1 < @dt2
  begin
    insert into #tmp values (@dt1, convert(int, substring(convert(binary( 8 ), @dt1),  5 ,  4 )))
    select @dt1 = @dt1 + convert(datetime, 0x00000050)
  end

select @dt1 = convert(datetime, 0x00000000)

select
  dt1= q.dt1,
  dt2 = dateAdd(ss,  30 , q.dt1),
  jopa = q.jopa
from
  (select
    dt1 = min(q1.dt),
    jopa = sum(q1.val)
  from
    (select
        ee = convert(int, substring(convert(binary( 8 ), dt - @dt1),  5 ,  4 ))/ 9000 ,
        dt,
        val
      from #tmp
    ) q1
  group by q1.ee
  ) q
order by q.dt1

drop table #tmp
go
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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