Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
Как написать следующий запрос, как сделать через cursor знаю а иначе?

Исходные данные:
-- заказ
CREATE TABLE [order_t] (
	[order_id] [int] NOT NULL , -- ID заказа
	[order_date] [datetime] NOT NULL , -- дата заказа
	[order_type] [int] NOT NULL ,  -- order_type возможные значения {1,2,3,4,5}
	CONSTRAINT [PK__order_t] PRIMARY KEY  CLUSTERED 
	(
		[order_id]
	)  ON [PRIMARY] ,
	CONSTRAINT [IX__order_t] UNIQUE  NONCLUSTERED 
	(
		[order_date],
		[order_type]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO
--строка заказа
CREATE TABLE [detail_t] (
	[order_id] [int] NOT NULL ,  
	[detail_price] [decimal](18, 0) NULL , --цена
	[detail_koef] [int] NULL , --коэффициент 
	[detail_delta] [decimal](18, 0) NULL , -- надбавка
	CONSTRAINT [FK__detail_t__order] FOREIGN KEY 
	(
		[order_id]
	) REFERENCES [order_t] (
		[order_id]
	)
) ON [PRIMARY]
GO
--сводная таблица
CREATE TABLE [current_t] (
	[cur_time] [datetime] NOT NULL ,  -- время 
	[pos_type1] [decimal](18, 0) NULL , --тип1 
	[pos_type2] [decimal](18, 0) NULL , --тип2 
	[pos_type3] [decimal](18, 0) NULL , --тип3 
	[pos_type4] [decimal](18, 0) NULL , --тип4 
	[pos_type5] [decimal](18, 0) NULL , --тип5 
)
GO

--заказ тестовые данные
insert into order_t
(
	order_id,
	order_date, 
	order_type
)
select 	5, '20040910 12:10:00', 4 union all
select 	3, '20040910 12:40:00', 1 union all
select 	1, '20040910 12:40:00', 2 union all
select 	2, '20040910 12:40:00', 5 union all
select 	4, '20040910 12:50:00', 2 union all
select 	6, '20040910 13:50:00', 2 union all
select 	9, '20040911 12:10:00', 1 union all
select 	10, '20040911 12:40:00', 2 union all
select 	11, '20040911 12:40:00', 5 union all
select 	12, '20040911 12:40:00', 1 union all
select 	7, '20040912 12:40:00', 1 union all
select 	8, '20040912 16:50:00', 1 union all
select 	15, '20040912 13:30:00', 2 union all
select 	18, '20040913 12:10:00', 5 union all
select 	16, '20040913 12:40:00', 1 union all
select 	17, '20040913 16:50:00', 1 union all
select 	14, '20040914 12:10:00', 1 union all
select 	13, '20040914 12:40:00', 1

--строка заказа тестовые данные
insert into detail_t
(
	[order_id],  
	[detail_price], --цена
	[detail_koef], --коэффициент
	[detail_delta] -- надбавка

)
select 1, 45, 12, 150 union all
select 1, 15, 1, 250 union all
select 2, 15, 2, 350 union all
select 2, 22, 10, 150 union all
select 3, 26, 11, 450 union all
select 3, 55, 18, 650 union all
select 4, 11, 13, 750 union all
select 4, 85, 18, 150 union all
select 5, 45, 2, 250 union all
select 5, 46, 10, 350 union all
select 6, 45, 32, 550 union all
select 7, 25, 12, 750 union all
select 7, 89, 2, 250 union all
select 8, 79, 5, 50 union all
select 8, 11, 8, 850 union all
select 8, 15, 7, 950 union all
select 9, 12, 8, 150 union all
select 10, 35, 12, 250 union all
select 11, 40, 6, 350 union all
select 12, 25, 5, 550 union all
select 13, 77, 2, 250 union all
select 14, 74, 4, 150 union all
select 15, 99, 1, 750 union all
select 16, 88, 10, 250 union all
select 16, 45, 11, 150 union all
select 17, 45, 12, 150 union all
select 18, 45, 12, 150 union all
select 18, 45, 12, 150 
GO

-- сводная тестовые данные
insert into current_t
(
	[cur_time]   --время
)
select 	'20040910 12:00:00' union all
select 	'20040910 12:10:00' union all
select 	'20040910 12:40:00' union all
select 	'20040910 12:50:00' union all
select 	'20040910 12:50:00' union all
select 	'20040910 13:00:00' union all
select 	'20040910 14:00:00' union all
select 	'20040911 10:00:00' union all
select 	'20040911 14:00:00' union all
select 	'20040912 11:00:00' union all
select 	'20040912 13:00:00' union all
select 	'20040912 13:40:00' union all
select 	'20040912 17:40:00' union all
select 	'20040913 12:10:00' union all
select 	'20040913 15:10:00' union all
select 	'20040913 16:10:00' union all
select 	'20040913 17:10:00' union all
select 	'20040914 12:05:00' union all
select 	'20040914 12:15:00' union all
select 	'20040914 12:40:00' union all
select 	'20040915 12:40:00'

Вывожу тестовые данные:
Для удобства восприятия объединил order_t и detail_t
select 
	o.order_date, 
	o.order_type, 
	d.detail_price, 
	d.detail_koef, 
	d.detail_delta 
from 
	order_t o inner join detail_t d on o.order_id = d.order_id
order by o.order_date asc, o.order_type asc
Результат:
order_dateorder_typedetail_pricedetail_koefdetail_delta
2004-09-10 12:10:00.0004452250
2004-09-10 12:10:00.00044610350
2004-09-10 12:40:00.00012611450
2004-09-10 12:40:00.00015518650
2004-09-10 12:40:00.00024512150
2004-09-10 12:40:00.0002151250
2004-09-10 12:40:00.0005152350
2004-09-10 12:40:00.00052210150
2004-09-10 12:50:00.00021113750
2004-09-10 12:50:00.00028518150
2004-09-10 13:50:00.00024532550
2004-09-11 12:10:00.0001128150
2004-09-11 12:40:00.0001255550
2004-09-11 12:40:00.00023512250
2004-09-11 12:40:00.0005406350
2004-09-12 12:40:00.00012512750
2004-09-12 12:40:00.0001892250
2004-09-12 13:30:00.0002991750
2004-09-12 16:50:00.000179550
2004-09-12 16:50:00.0001118850
2004-09-12 16:50:00.0001157950
2004-09-13 12:10:00.00054512150
2004-09-13 12:10:00.00054512150
2004-09-13 12:40:00.00018810250
2004-09-13 12:40:00.00014511150
2004-09-13 16:50:00.00014512150
2004-09-14 12:10:00.0001744150
2004-09-14 12:40:00.0001772250


Алгоритм выполнения запроса,
Обход всей таблицы current_t,
cur_timepos_type1pos_type2pos_type3pos_type4pos_type5
2004-09-10 12:00:00.000NULLNULLNULLNULLNULL
2004-09-10 12:10:00.000NULLNULLNULLNULLNULL
2004-09-10 12:40:00.000NULLNULLNULLNULLNULL
2004-09-10 12:50:00.000NULLNULLNULLNULLNULL
2004-09-10 12:50:00.000NULLNULLNULLNULLNULL
2004-09-10 13:00:00.000NULLNULLNULLNULLNULL
2004-09-10 14:00:00.000NULLNULLNULLNULLNULL
2004-09-11 10:00:00.000NULLNULLNULLNULLNULL
2004-09-11 14:00:00.000NULLNULLNULLNULLNULL
2004-09-12 11:00:00.000NULLNULLNULLNULLNULL
2004-09-12 13:00:00.000NULLNULLNULLNULLNULL
2004-09-12 13:40:00.000NULLNULLNULLNULLNULL
2004-09-12 17:40:00.000NULLNULLNULLNULLNULL
2004-09-13 12:10:00.000NULLNULLNULLNULLNULL
2004-09-13 15:10:00.000NULLNULLNULLNULLNULL
2004-09-13 16:10:00.000NULLNULLNULLNULLNULL
2004-09-13 17:10:00.000NULLNULLNULLNULLNULL
2004-09-14 12:05:00.000NULLNULLNULLNULLNULL
2004-09-14 12:15:00.000NULLNULLNULLNULLNULL
2004-09-14 12:40:00.000NULLNULLNULLNULLNULL
2004-09-15 12:40:00.000NULLNULLNULLNULLNULL


Берем текущую дату-время,
вычисляем значение для столбца pos_typeX, где X - это order_type, для этого типа находим соответствующую
в таблице detail_t ближайщую запись см. алгоритм нахождения ближ. записи ниже, вычисляем pos_type1, pos_type2,
pos_type3, pos_type4, pos_type5 по следующему алгоритму: pos_typeX = SUM(detail_price) + SUM(detail_koef) - SUM(detail_delta), где X - соответствующий order_type.
Переходим к вычислению следующего pos_type2, и т.д таким образом вычисляется для каждого pos_type.

Алгоритм нахождения ближайшей записи:
Рассмотрим на примере, пусть есть у нас даты, и order_type в таблице order_t:
date type
2004-09-13 12:00:00 1
2004-09-13 12:10:00 1
2004-09-13 12:40:00 2
2004-09-13 12:40:00 2

Текущая дата в current_t пусть '2004-09-13 12:30', type = 1 тогда ближайшей записью будет 12:10 и с нее надо брать значения для вычисления
Если текущая дата в current_t '2004-09-13 12:40', type = 2 тогда ближайшей записью будет 12:40 и с нее надо брать значения для вычисления
Если текущая дата в current_t '2004-09-13 12:09', type =1 тогда ближайшая считается 12:00 и с нее надо брать значения для вычисления
Если же текущая дата в current_t '2004-09-13 12:09', type =2 тогда ближайшей записи нет и тогда результат расчета должен быть NULL.

В результате такого сложного запроса должна получиться такая сводная таблица:
cur_timepos_type1pos_type2pos_type3pos_type4pos_type5
2004-09-10 12:00:00.000NULLNULLNULLNULLNULL
2004-09-10 12:10:00.000NULLNULLNULL492NULL
2004-09-10 12:40:00.0001249380NULL492-56
2004-09-10 12:50:00.00012492076NULL492-56
2004-09-10 12:50:00.00012492076NULL492-56
2004-09-10 13:00:00.00012492076NULL492-56
2004-09-10 14:00:00.0001249890NULL492-56
2004-09-11 10:00:00.0001249890NULL492-56
2004-09-11 14:00:00.000-425170NULL492-110
2004-09-12 11:00:00.000-425170NULL492-110
2004-09-12 13:00:00.000596170NULL492-110
2004-09-12 13:40:00.000596-651NULL492-110
2004-09-12 17:40:00.000-845-651NULL492-110
2004-09-13 12:10:00.000-845-651NULL4921860
2004-09-13 15:10:00.0002393-651NULL4921860
2004-09-13 16:10:00.0002393-651NULL4921860
2004-09-13 17:10:00.000390-651NULL4921860
2004-09-14 12:05:00.000390-651NULL4921860
2004-09-14 12:15:00.000146-651NULL4921860
2004-09-14 12:40:00.000-96-651NULL4921860
2004-09-15 12:40:00.000-96-651NULL4921860


Не знаю лично мне кажется задача не решаема без курсора.
22 сен 04, 09:32    [977309]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
Ничего особенно сложного не видать. Счас тебе здешние орлы понапишут...
Но есть вопрос, а когда pos_type6, pos_type7 и т.д. появяться, чего ты будешь делать?
22 сен 04, 09:46    [977341]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
Структуру менять не могу, могу изменять индексы если надо. Других order_type больше не появяться.
22 сен 04, 09:58    [977375]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
Счас тебе здешние орлы понапишут...
не с той ноги встали?

2MS SQL (guest)
пусть тебе тогда самый главный орел пишет.
22 сен 04, 09:59    [977380]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
Алексей2003.
Счас тебе здешние орлы понапишут...
не с той ноги встали?

2MS SQL (guest)
пусть тебе тогда самый главный орел пишет.


Ну не хочешь в стаю - не надо. Пиши отдельно.
22 сен 04, 10:07    [977414]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
Мне без разницы кто напишет :) Только никто не пишет.
Я могу задачу облегчить, предположим что рассчитывать pos_typeX не надо, а надо просто осуществить алгоритм поиска ближайшей записи, т.е. состыковать таблицы current_t и order_t по ближайшим датам.
22 сен 04, 10:13    [977441]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
да aleks2 не может ничего написать, вот и отмазывается тут.
22 сен 04, 10:17    [977462]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
Дарагой, это ж подумать нада, да и писать время...
Жди-с...
22 сен 04, 10:18    [977465]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
Ребята вы что устраиваете в моем топике ? Лучше бы спросили меня что-нибудь конкретизировать
22 сен 04, 10:20    [977474]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
ждем-с
до завтра хватит? времени..
22 сен 04, 10:24    [977486]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
-- доп таблица, [OT]=1,2,3,4,5. Писать INSERT мне лень
CREATE TABLE [OTypes] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[OT] [int] NOT NULL ,
	CONSTRAINT [PK_OTypes] PRIMARY KEY  CLUSTERED 
	(
		[ID]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

CREATE VIEW dbo.x_current_t
AS
SELECT     dbo.OTypes.OT, dbo.current_t.cur_time, dbo.current_t.ID AS ct_ID
FROM         dbo.current_t CROSS JOIN
                      dbo.OTypes
GO

CREATE VIEW dbo.x_date_diffs
AS
SELECT     c.OT, c.cur_time, [0].order_date, ABS(DATEDIFF(s, c.cur_time, [0].order_date)) AS Diff, c.ct_ID, [0].order_id
FROM         dbo.order_t [0] INNER JOIN
                      dbo.x_current_t c ON [0].order_type = c.OT
GO

CREATE VIEW dbo.x_linked_O_C
AS
SELECT     dbo.order_t.order_id, dbo.order_t.order_date, dbo.order_t.order_type, dbo.x_date_diffs.cur_time, dbo.x_date_diffs.ct_ID
FROM         dbo.x_date_diff_min_O INNER JOIN
                      dbo.x_date_diffs ON dbo.x_date_diff_min_O.OT = dbo.x_date_diffs.OT AND dbo.x_date_diff_min_O.MinDiff = dbo.x_date_diffs.Diff INNER JOIN
                      dbo.order_t ON dbo.x_date_diff_min_O.order_id = dbo.order_t.order_id AND dbo.x_date_diffs.order_id = dbo.order_t.order_id
GO

-- Это сопоставляет каждой строке из order_t ОДНУ ближайшую строку из current_t 
CREATE VIEW dbo.x_linked_O_C_
AS
SELECT     order_id, order_date, order_type, MIN(cur_time) AS cur_time
FROM         dbo.x_linked_O_C
GROUP BY order_id, order_date, order_type
GO
-- ну а дальше сам давай...

22 сен 04, 10:25    [977495]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
Алексей2003.
ждем-с
до завтра хватит? времени..


Вестимо... хватит.
22 сен 04, 10:26    [977499]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL(guest)
Guest
>до завтра хватит? времени..
время есть

To aleks2
Думаю над вашим вариантом...
22 сен 04, 10:33    [977536]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
2MS SQL (guest)
самый главный орел тебе сказал самое реальное решение... всегда используй вьюхи.
22 сен 04, 10:35    [977544]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
А view в данном случае это плохо или хорошо?

2 aleks2
Попытался сделать следующий VIEW.
CREATE VIEW dbo.x_current_t
AS
SELECT     dbo.OTypes.OT, dbo.current_t.cur_time, dbo.current_t.ID AS ct_ID
FROM         dbo.current_t CROSS JOIN   dbo.OTypes
GO
Но у меня нет current_t.ID ? Что делать?
22 сен 04, 10:43    [977582]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
не знаю как в данном случае... знаю только, если использовать вьюхи на вьюхах... в какой-то момент может случиться, что запросы долго отрабатывают...

латно, покумарили и хватит... лучше скажи как из
2004-09-10 12:10:00.000 4 45 2 250 
2004-09-10 12:10:00.000 4 46 10 350
получить 492 используя формулу SUM(detail_price) + SUM(detail_koef) - SUM(detail_delta), у меня получается -497.
22 сен 04, 10:46    [977595]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL(guest)
Guest
Извини ошибся в формуле формула должна быть следующая:

pos_typeX = SUM(detail_price) * SUM(detail_koef) - SUM(detail_delta)
22 сен 04, 10:50    [977622]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
а от перемены мест слагаемых сумма меняется, вы в курсе?
45*2-250 + 46*10-350 = -50
и
(45+46)*(2+10) - (250+350) = 492
22 сен 04, 10:54    [977652]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
>а от перемены мест слагаемых сумма меняется, вы в курсе?
45*2-250 + 46*10-350 = -50
и
(45+46)*(2+10) - (250+350) = 492

Да нужен второй вариант как раз где 492.
22 сен 04, 10:57    [977674]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
тада так
declare @t table (order_date datetime, pos_type1 int, pos_type2 int, pos_type3 int, pos_type4 int, pos_type5 int)
insert into @t
 select o.order_date,
    nullif(sum(case when order_type = 1 then pos_type else 0 end),0) pos_type1,
    nullif(sum(case when order_type = 2 then pos_type else 0 end),0) pos_type2,
    nullif(sum(case when order_type = 3 then pos_type else 0 end),0) pos_type3,
    nullif(sum(case when order_type = 4 then pos_type else 0 end),0) pos_type4,
    nullif(sum(case when order_type = 5 then pos_type else 0 end),0) pos_type5
  from
   (select
     	o.order_date,  o.order_type,
      sum(detail_price) * sum(detail_koef) - sum(detail_delta) pos_type
     from 
     	order_t o inner join detail_t d on o.order_id = d.order_id
     group by o.order_date, o.order_type
   ) o
  group by o.order_date

select c.cur_time, t1.pos_type1, t2.pos_type2, t3.pos_type3, t4.pos_type4, t5.pos_type5
 from current_t c
  left join @t t1 on t1.order_date = (select max(tt.order_date) from @t tt where tt.order_date <= c.cur_time and tt.pos_type1 is not null)
  left join @t t2 on t2.order_date = (select max(tt.order_date) from @t tt where tt.order_date <= c.cur_time and tt.pos_type2 is not null)
  left join @t t3 on t3.order_date = (select max(tt.order_date) from @t tt where tt.order_date <= c.cur_time and tt.pos_type3 is not null)
  left join @t t4 on t4.order_date = (select max(tt.order_date) from @t tt where tt.order_date <= c.cur_time and tt.pos_type4 is not null)
  left join @t t5 on t5.order_date = (select max(tt.order_date) from @t tt where tt.order_date <= c.cur_time and tt.pos_type5 is not null)
22 сен 04, 11:02    [977711]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL(guest)
Guest
Хех, круто...

Думаю и ишу баги.
22 сен 04, 11:10    [977747]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
aleks2
Guest
>>Но у меня нет current_t.ID ? Что делать?

Ну вставить или ну убрать... По выбору.

View на View безопасны по скорости (если, конечно, правильно написаны), ибо оптимизатор T-SQL раскрывает все View-и и сливает их в один запрос.

А писать так удобнее - можно смотреть промежуточные результаты.
22 сен 04, 11:54    [977944]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
2MS SQL (guest)
пока обедал, пришла другая идея... :)

если добавить к таблице current_t поле
id int identity
(дропни таблицу что давал в примере, добавь эту колонку и залей данные заново)
тогда все это можно запихнуть в один запрос.
select c.id, c.cur_time,
  nullif(sum(case when order_type = 1 then pos_type else 0 end),0) pos_type1,
  nullif(sum(case when order_type = 2 then pos_type else 0 end),0) pos_type2,
  nullif(sum(case when order_type = 3 then pos_type else 0 end),0) pos_type3,
  nullif(sum(case when order_type = 4 then pos_type else 0 end),0) pos_type4,
  nullif(sum(case when order_type = 5 then pos_type else 0 end),0) pos_type5
 from current_t c
  left join
   (select
     	o.order_date,  o.order_type,
      sum(detail_price) * sum(detail_koef) - sum(detail_delta) pos_type
     from 
     	order_t o inner join detail_t d on o.order_id = d.order_id
     group by o.order_date, o.order_type
   ) t1
   on t1.order_date =
    (select max(tt.order_date)
      from
       (select
         	o.order_date, o.order_type
         from 
         	order_t o inner join detail_t d on o.order_id = d.order_id
          where o.order_date <= c.cur_time and t1.order_type = o.order_type
         group by o.order_date, o.order_type
       ) tt
    ) 
 group by c.id, c.cur_time
у меня план показал заметное улучшение производительности... :) в 2 раза (по процентам) 33% к 67%
можно добавить индекс по полю
create index IX_detail_t_order_id on detail_t(order_id)
план покажет еще более приемлемый показатель (по сравнению с тем, что я дал до этого) 28% к 72%
22 сен 04, 11:58    [977967]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
Алексей2003.
Guest
P.S. для таблицы current_t без колонки ID
записи со значением даты
'20040910 12:50:00'
одинаково параллельны, и поэтому происходит суммирование этой даты при группировке.
получается 1 дата с удвоенным значением.
если же убрать этот дублеж, можно обойтись и без колонки id.
22 сен 04, 12:01    [977976]     Ответить | Цитировать Сообщить модератору
 Re: Не могу сообразить как сделать такой сложный запрос, на мой взгляд очень сложно  [new]
MS SQL (guest)
Guest
2 aleks2 и Алексей2003
Спасибо ребята, видимо вы и есть те орлы с sql.ru :-)

Пробую и смотря все варианты, пока больше симпатизирует вариант Алексей2003. Позже посмотрю на реальной таблице, СПАСИБО - О !!!!!!!!
22 сен 04, 12:14    [978041]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить