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

Откуда:
Сообщений: 19
Добрый день, подскажите, помогите!

Имеются две таблицы: 1. Items со столбцами (ID, Name), 2. Data со столбцами (ItemID,Time,Value)
Нужно получить: таблицу из столбцов: Name (без повторов), Time (последнее по времени в БД) и соответствующее Value
Выполняю запрос:
SELECT DISTINCT Items.Name, MAX(Data.Time) as Time
FROM vtec.dbo.Data INNER JOIN vtec.dbo.Items ON Data.ItemID=Items.ID and
Items.Name like '%DA%' and 
Items.Name not like '%HDA%'
GROUP BY Items.Name
order by Time DESC

Внимание вопрос: как добавить столбец Value?
8 дек 16, 15:34    [19980926]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
AmKad
Member

Откуда:
Сообщений: 5308
row_number()
8 дек 16, 15:39    [19980958]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
КусокАналитика
Guest
Предположим у вас одному Name соответствует миллион Value, какое именно Value из предложенных значений вы бы хотели лицезреть в результатах запроса?
8 дек 16, 15:41    [19980969]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

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

Я бы предложил CTE. Мне просто это как то ближе:) Вам их можно использовать? На лекциях давали?
8 дек 16, 15:42    [19980972]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
AmKad
Member

Откуда:
Сообщений: 5308
КусокАналитика
Предположим у вас одному Name соответствует миллион Value, какое именно Value из предложенных значений вы бы хотели лицезреть в результатах запроса?
Очевидно тот, что соответствует последнему Time.
8 дек 16, 15:43    [19980977]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
КусокАналитика,
соответствующее времени Time
8 дек 16, 15:43    [19980978]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
buven,
CTE не слышал, можно все, лишь бы запросы не сильно долгие были, лекций нет, начинающий самоучка по книжкам
8 дек 16, 15:45    [19980991]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WITH T AS
(
 SELECT N=ROW_NUMBER()OVER(PARTITION BY I.[Name] ORDER BY D.[Time] DESC),*
 FROM vtec.dbo.Data D
 JOIN vtec.dbo.Items I
   ON D.ItemID=I.ID
  AND I.[Name] LIKE '%DA%'
  AND I.[Name] NOT LIKE '%HDA%'
)
SELECT [Name], [Time]
FROM T
WHERE N=1;
8 дек 16, 15:49    [19981009]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
В конечном SELECTе надо ещё [Value] добавить
Через запятую.
8 дек 16, 15:51    [19981020]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

Откуда:
Сообщений: 792
iap
WITH T AS
(
 SELECT N=ROW_NUMBER()OVER(PARTITION BY I.[Name] ORDER BY D.[Time] DESC),*
 FROM vtec.dbo.Data D
 JOIN vtec.dbo.Items I
   ON D.ItemID=I.ID
  AND I.[Name] LIKE '%DA%'
  AND I.[Name] NOT LIKE '%HDA%'
)
SELECT [Name], [Time]
FROM T
WHERE N=1;

Видимо тоже подумал, что time это datetime и может быть уникальным:)

fregl, что делать, если данные собираются больше суток? КусокАналитика видимо об этом просил задуматься.
8 дек 16, 15:53    [19981028]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
buven,
в Time время в формате "2016-12-08 16:00:00.000"
8 дек 16, 15:59    [19981048]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
fregl
buven,
в Time время в формате "2016-12-08 16:00:00.000"
Это строка или, всё-таки, DATETIME?
8 дек 16, 16:10    [19981122]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

Откуда:
Сообщений: 792
fregl
buven,
в Time время в формате "2016-12-08 16:00:00.000"


Тогда iap попал в точку. А вам курить Common Table Expressions.
8 дек 16, 16:13    [19981143]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
iap
fregl
buven,
в Time время в формате "2016-12-08 16:00:00.000"
Это строка или, всё-таки, DATETIME?

datetime, не NULL
8 дек 16, 16:14    [19981144]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
iap
WITH T AS
(
 SELECT N=ROW_NUMBER()OVER(PARTITION BY I.[Name] ORDER BY D.[Time] DESC),*
 FROM vtec.dbo.Data D
 JOIN vtec.dbo.Items I
   ON D.ItemID=I.ID
  AND I.[Name] LIKE '%DA%'
  AND I.[Name] NOT LIKE '%HDA%'
)
SELECT [Name], [Time]
FROM T
WHERE N=1;

Работает, но выполняется 10 минут 33 секунды
Начальный вариант выполнялся 6 секунд
8 дек 16, 16:15    [19981155]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

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

А вот так?
with CTE (ItemID,MAX_TIME) as (
SELECT DISTINCT data.ItemID, MAX(Data.Time) as MAX_TIME
FROM dbo.Data 
GROUP BY Items.Name)
select  Items.Name, Data.Time,Data.Value
FROM vtec.dbo.Data inner join CTE on Data.ItemID=CTE.ItemID and Data.Time=CTE.MAX_TIME
INNER JOIN vtec.dbo.Items ON Data.ItemID=Items.ID and
Items.Name like '%DA%' and 
Items.Name not like '%HDA%'
order by Time DESC
8 дек 16, 16:23    [19981205]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
buven,
LOL
автор
SELECT DISTINCT data.ItemID, MAX(Data.Time) as MAX_TIME
FROM dbo.Data
GROUP BY Items.Name
8 дек 16, 16:24    [19981211]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

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

GROUP BY Items.Name)
заменить на
GROUP BY data.ItemID)
8 дек 16, 16:24    [19981212]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

Откуда:
Сообщений: 792
TaPaK
buven,
LOL
автор
SELECT DISTINCT data.ItemID, MAX(Data.Time) as MAX_TIME
FROM dbo.Data
GROUP BY Items.Name


Пояснишь может веселье свое?:)
8 дек 16, 16:27    [19981230]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
buven,
with CTE (ItemID,MAX_TIME) as (
SELECT DISTINCT data.ItemID, MAX(Data.Time) as MAX_TIME
FROM vtec.dbo.Data 
GROUP BY Items.Name)
select  Items.Name, Data.Time,Data.Value
FROM vtec.dbo.Data inner join CTE on Data.ItemID=CTE.ItemID and Data.Time=CTE.MAX_TIME
INNER JOIN vtec.dbo.Items ON Data.ItemID=Items.ID and
Items.Name like '%DA%' and 
Items.Name not like '%HDA%'
order by Time DESC


Сообщение 4104, уровень 16, состояние 1, строка 4
Не удалось привязать составной идентификатор "Items.Name".
8 дек 16, 16:27    [19981231]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
AmKad
Member

Откуда:
Сообщений: 5308
fregl
Работает, но выполняется 10 минут 33 секунды
Начальный вариант выполнялся 6 секунд
Аналитика она такая, оптимизатор еще не умеет делать сортировку, вместо этого он делает неявный join.
8 дек 16, 16:30    [19981242]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

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

GROUP BY Items.Name)
заменить на
GROUP BY data.ItemID)


23 секунды
8 дек 16, 16:30    [19981244]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
buven
Member

Откуда:
Сообщений: 792
fregl
buven
buven,

GROUP BY Items.Name)
заменить на
GROUP BY data.ItemID)


23 секунды


Поняли почему быстрее чем у iap?
Скорость приемлемая для вас?
Я так понимаю, по скольку еще книжки у вас идут, план запроса, индексы и т.д. обсуждать еще рано... ?
8 дек 16, 16:45    [19981317]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
AmKad
Member

Откуда:
Сообщений: 5308
buven
Я так понимаю, по скольку еще книжки у вас идут, план запроса, индексы и т.д. обсуждать еще рано... ?
А ты в какой книжке пример взял, чтобы distinct с группировкой использовали?
8 дек 16, 16:48    [19981325]     Ответить | Цитировать Сообщить модератору
 Re: групировка, сортировка и фильтрация  [new]
fregl
Member

Откуда:
Сообщений: 19
buven
Поняли почему быстрее чем у iap?
Скорость приемлемая для вас?
Я так понимаю, по скольку еще книжки у вас идут, план запроса, индексы и т.д. обсуждать еще рано... ?

пытаюсь разобраться, пока не понятно, читаю...
кстати, 23 секунды это был первый запрос, теперь почему-то по 12 секунд, может что-то наложилось...
индексы для быстрого поиска?
8 дек 16, 16:49    [19981331]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить