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

Откуда: Москва
Сообщений: 3
Вообщем суть такая:
SELECT DISTINCT mon.Id,mon.Time, mon.Day, mon.DownTime, l.Field1, l.Id
 FROM monitor.Monitor AS mon 
LEFT JOIN monitor.Log l ON l.MonitorId = mon.id
 where l.id IN (select max(id) from monitor.Log GROUP by Field1) AND l.ResultId != 1 AND mon.ScheduleId = 5
  ORDER BY mon.Id

В этом случае он объединяет в поле all_field все значения field без нахождения максимального id
 SELECT DISTINCT mon.Id,mon.Time, mon.Day, mon.DownTime,(SELECT l2.Field1 + '' FROM monitor.Log l2 WHERE  l2.MonitorId = mon.Id FOR XML PATH('')) AS all_field1
 FROM monitor.Monitor AS mon 
LEFT JOIN monitor.Log l ON l.MonitorId = mon.id
 where l.id IN (select max(id) from monitor.Log GROUP by Field1) AND l.ResultId != 1 AND mon.ScheduleId = 5
  ORDER BY mon.Id

А В этом случае он выводит только те поля, которые отличаются по полю field1, взяв максимальный id


Вопрос, как объединить, т.е. что бы находились максимальные id из сгруппированных по полю field
и выводил их потом через запятую( к примеру)
20 ноя 17, 14:25    [20969186]     Ответить | Цитировать Сообщить модератору
 Re: группировка и вывод  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20522
Filsergey88
он объединяет в поле all_field
В запросе нет такого поля или алиаса.
20 ноя 17, 14:48    [20969289]     Ответить | Цитировать Сообщить модератору
 Re: группировка и вывод  [new]
mr.dfox
Member

Откуда: Где где .. в караганде
Сообщений: 538
Filsergey88,

не как то так?:

SELECT distinct mon.Id, max(num)  over (partition by mon.Id)
FROM monitor.Monitor AS mon 
LEFT JOIN monitor.Log l ON l.MonitorId = mon.id
 WHERE l.ResultId != 1 AND mon.ScheduleId = 5
FOR XML PATH('')

Может что то не понял
20 ноя 17, 14:56    [20969327]     Ответить | Цитировать Сообщить модератору
 Re: группировка и вывод  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Я не понимаю, зачем там LEFT?
Условие в WHERE для l.id или l.ResultId отбрасывают NULLы, которые появились в LEFT JOINе.
20 ноя 17, 15:16    [20969404]     Ответить | Цитировать Сообщить модератору
 Re: группировка и вывод  [new]
Filsergey88
Member

Откуда: Москва
Сообщений: 3
mr.dfox,

короче суть задачи такова:
есть две таблицы, которые связаны по id.
monitor.id и log.MonitorId

нужно сгруппировать все поля по field1, который в таблице log
и вывести на экран наибольший id (который также в log).
Это осуществляется тем кодом что снизу


FROM monitor.Monitor AS mon
LEFT JOIN monitor.Log l ON l.MonitorId = mon.id
where l.id IN (select max(id) from monitor.Log GROUP by Field1) AND l.ResultId != 1 AND mon.ScheduleId = 5
ORDER BY mon.Id

а после дали задание перечислить через запятую field1.
У меня поучилось это сделать, но он выводит абсолютно все field1,а надо выводить после группировки...
20 ноя 17, 15:21    [20969426]     Ответить | Цитировать Сообщить модератору
 Re: группировка и вывод  [new]
Filsergey88
Member

Откуда: Москва
Сообщений: 3
Akina,

(SELECT l2.Field1 + '' FROM monitor.Log l2 WHERE l2.MonitorId = mon.Id FOR XML PATH('')) AS all_field1
20 ноя 17, 15:22    [20969431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить