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

Откуда:
Сообщений: 106
Добрый день. Есть две таблицы

table1
id_table1 name
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 name1
B8BBC8B6-F36F-434F-9574-91CDAF1E708D name2
93E8FECB-8782-4357-B0FC-75C147594F50 name3
5B22FE0E-36A5-42AE-A280-93E6D47B4044 name4


table2
id_table1 start stop
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 08:34:00.000null
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 07:34:00.00007:34:00.000
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 06:34:00.00006:34:00.000
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 04:34:00.00004:34:00.000
B8BBC8B6-F36F-434F-9574-91CDAF1E708D 2019-06-24 08:00:00.00008:00:00.000
93E8FECB-8782-4357-B0FC-75C147594F5 2019-06-24 07:01:00.00008:34:00.000
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 04:30:00.000null
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2019-06-24 03:14:00.000null


нужно на выходе получить такой результат

id_table1 start stop
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-06-24 08:34:00.000null
B8BBC8B6-F36F-434F-9574-91CDAF1E708D 2019-06-24 08:00:00.00008:00:00.000
93E8FECB-8782-4357-B0FC-75C147594F5 2019-06-24 07:01:00.00008:34:00.000
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2019-06-24 03:14:00.000null


То есть по каждой id_table1 получить последний результат по дате, я пробовал делать так:

select t1.id_table1, t1.name, MAX(t2.start) as start
from table1 as t1
left join table2  as  t2 on t1.id_table1 = t2.id_table1
group by t1.id_table1, t1.name


но если я добавлю туда t2.stop то все поломается. Подскажите пожалуйста как правильно составить запрос.
24 июн 19, 09:13    [21913816]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Да вроде не должно.
Покажи, как добавлял.
24 июн 19, 09:21    [21913822]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Вот так, но там получаются левые даты stop

select t1.id_table1, t1.name, MAX(t2.start) as start, MAX(t2.stop) as stop
from table1 as t1
left join table2  as  t2 on t1.id_table1 = t2.id_table1
group by t1.id_table1, t1.name


я понимаю что это не правильно, а понять как надо не могу
24 июн 19, 09:24    [21913826]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
так "левые" или "ломается"?
24 июн 19, 09:25    [21913827]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Выходит просто максимальная дата t2.stop на привязанная к t2.start
24 июн 19, 09:27    [21913829]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
А что, есть объекты, по которым не было операций?
Попробуй убрать Left, поставь INNER
24 июн 19, 09:28    [21913831]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Hopfen_Artur
Выходит просто максимальная дата t2.stop на привязанная к t2.start

Так это совсем другое дело.
Ты вовыдишь максимальную дату STOP, а не дату, из записи с минимальной датой.
24 июн 19, 09:30    [21913834]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Это то я понимаю, а как правильно, вообще надо сверху max убрать, и записать условие в where. Пробую пока что
24 июн 19, 09:32    [21913835]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Надо сначала найти минимальную дату, а потом по ней искать и соответствующий STOP
24 июн 19, 09:33    [21913836]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
этот товарищь 982183 хочет просто на 3 страницы тему растянуть что ли?
24 июн 19, 09:36    [21913837]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
хотел так написать, но не прокатило, думаю дальше:

select t1.id_table1, t1.name, t2.start,  t2.stop, 
from table1 as t1
left join table2  as  t2 on t1.id_table1 = t2.id_table1
where t2.start IN (SELECT max(t2.start) FROM t2)
24 июн 19, 09:36    [21913838]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
TaPaK
этот товарищь 982183 хочет просто на 3 страницы тему растянуть что ли?

Старая дурная привычка давать людям вместо рыбы не удочку, а конструктор для её сборки.
24 июн 19, 10:09    [21913868]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
пока еще не разобрался =(
24 июн 19, 10:10    [21913871]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Hopfen_Artur
хотел так написать, но не прокатило, думаю дальше:

select t1.id_table1, t1.name, t2.start,  t2.stop, 
from table1 as t1
left join table2  as  t2 on t1.id_table1 = t2.id_table1
where t2.start IN (SELECT max(t2.start) FROM t2)


Неправильно думаешь.
задача "Вывести start и stop из записей с максимальным start"
А не "вывести максимальный start и максимальный stop"
24 июн 19, 10:11    [21913873]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
я знаю что мне нужно, я не знаю как это сделать, в этом и проблема.
24 июн 19, 10:16    [21913879]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
сформируй таблицу с максимальным start, а потом свяжи её с исходной по id и start.
Так найдешь соответствующий stop
24 июн 19, 10:18    [21913881]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

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

смысл понял, спасибо, сейчас попробую
24 июн 19, 10:25    [21913883]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
Hopfen_Artur
я знаю что мне нужно, я не знаю как это сделать, в этом и проблема.

select id_table1, name, start,  stop
from (
    select t1.id_table1, t1.name, t2.start,  t2.stop, row_number() over(partition by t1.id_table1 order by t2.start desc) as R
    from table1 as t1
        left join table2 as t2 on t1.id_table1 = t2.id_table1
) t
where R = 1
24 июн 19, 10:27    [21913885]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
982183
сформируй таблицу с максимальным start, а потом свяжи её с исходной по id и start.
А если start не уникальный?
В общем, зависит от постановки задачи (какие записи показывать из некольких неуникальных start)
24 июн 19, 10:29    [21913887]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

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

да старт даты могут совпадать, просто одну из них, любую.
24 июн 19, 10:37    [21913891]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
если start не уникальный, это ошибочная запись, бывает такое иногда, поэтому любую одну из них
24 июн 19, 10:38    [21913892]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
Hopfen_Artur
Member

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

все работает спасибо вам
24 июн 19, 10:42    [21913894]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильно подвязать таблицы.  [new]
982183
Member

Откуда: VL
Сообщений: 3350
А не легче ли потом просто UPDATE-ом пройтись.
надо будет затестить планы....
24 июн 19, 10:42    [21913896]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить