Выберите запись максимального значения из соединения «один ко многим» - PullRequest
0 голосов
/ 25 ноября 2018

Я хочу объединить две таблицы, но вторая таблица содержит несколько строк параметров, по которым я хочу построить соединение.

TABLE1

+------------+-----------+
|   Ddate    |    ROOMNO |
+------------+-----------+
| 2018-22-11 |       101 |
| 2018-22-11 |       102 |
| 2018-22-11 |       103 |
| 2018-22-11 |       104 |
+------------+-----------+

TABLE2 (несколько строк на номер комнаты)

+------------+-----------+------------------+
|   Ddate    |    ROOMNO |  MaxVoltage      |
+------------+-----------+------------------+
| 2018-22-11 |       101 |   230            |
| 2018-22-11 |       101 |   240            |
| 2018-22-11 |       101 |   250   -----MAX |
| 2018-22-11 |       102 |   230            |
| 2018-22-11 |       102 |   255   -----MAX |
+------------+-----------+------------------+

Желаемый результат (я хочу максимальное напряжение для комнаты на дату)

+------------+-----------+------------+
|   Ddate    |    ROOMNO | MaxVoltage |
+------------+-----------+------------+
| 2018-22-11 |       101 |        250 |
| 2018-22-11 |       102 |        255 |
| 2018-22-11 |       103 |        235 |
| 2018-22-11 |       104 |        238 |
| 2018-22-11 |       105 |        255 |
+------------+-----------+------------+

Ответы [ 5 ]

0 голосов
/ 26 ноября 2018
select t1.dDate,t1.roomno, mvoltage from table1 t1 join
    (select Ddate ,roomno,max(MaxVoltage ) as mvoltage from table2
    group by Ddate,roomno
    ) t2 on t1.Ddate=t2.Ddate and t1.Roomno = t2.RoomNo
0 голосов
/ 25 ноября 2018

Использование apply:

select t1.*, t2.maxvoltage
from table1 t1 outer apply
     (select top (1) t2.*
      from table2 t2
      where t2.roomno = t1.roomno and t2.ddate = t1.ddate
      order by maxvoltage desc
     ) t2;
0 голосов
/ 25 ноября 2018

Сначала вы будете регулярно объединять две таблицы, используя дату и номер комнаты.затем используйте агрегатную функцию max для поля напряжения с предложением over, затем сгруппируйте по номеру комнаты и дате, как показано ниже

select distinct t1.Ddate, t1.RoomNo, MAX(t2.MaxVoltage) over(partition by t1.RoomNo order by t1.Ddate) MaxVoltage
from Table1 t1
join Table2 t2 on t2.Ddate = t1.Ddate and t2.RoomNo = t1.RoomNo
0 голосов
/ 25 ноября 2018
SELECT t2.d, t2.roomno, max(t2.maxvolt)
FROM table1 AS t1 JOIN table2 AS t2 ON t1.ddate = t2.ddate 
AND t1.roomno = t2.roomno
GROUP BY t2.d, t2.roomno;
0 голосов
/ 25 ноября 2018

использовать подзапрос

    select t1.dDate,t1.roomno,mvoltage from table1 t1 join
    (select Ddate ,roomno,max(MaxVoltage ) as mvoltage from table2
    group by Ddate,roomno
    ) t2 on t1.Ddate=t2.Ddate 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...