Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 21042 |
|
||
20 ноя 17, 14:48 [20969289] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47061 |
Я не понимаю, зачем там LEFT? Условие в WHERE для l.id или l.ResultId отбрасывают NULLы, которые появились в LEFT JOINе. |
20 ноя 17, 15:16 [20969404] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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 | ![]() |