powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сравнение записей в таблице
4 сообщений из 4, страница 1 из 1
Сравнение записей в таблице
    #39901732
Crank_1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изучаю sql столкнулся со сложностями в решении элементарной задачи.
Имеется два отношения: в отношение Battles включены название и дата битвы, в которой участвовали корабли, а в отношении Outcomes – название корабля, название битвы, в которой они участвовали, результат участия данного корабля в битве (потоплен-sunk, поврежден - damaged или невредим - OK).

Условие задачи: найдите корабли, `сохранившиеся для будущих сражений`; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже.

В целом у меня есть понимение, как решить задачу, но проблема в том, чтобы выполнить основное условие задачи: "найдите корабли, `сохранившиеся для будущих сражений`. Каким образом можно сравнить дату битвы одного и того же корабля? То есть есть две записи, одна более ранняя, другая более поздняя, если у корабля есть запись с более поздней датой битвы , значит он удовлетворят условиям задачи.

пробовал решить так, но тут неправильно сравниваются даты, а как правильно я не знаю.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with One as (select ship, date, battle
            from outcomes o join battles b
            on o.battle = b.name
            where ship in (select ship
                                from outcomes o join battles b
                                on o.battle = b.name
                                where result = 'damaged'))
select o.ship, o.date
from One o join (select date, ship
                    from outcomes o join battles b
                    on o.battle = b.name
                    where result = 'damaged') as b
on o.ship = b.ship
where o.date > b.date
Having count(o.battle) > 1
...
Рейтинг: 0 / 0
Сравнение записей в таблице
    #39901743
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crank_1986,

1
самое простое, очевидное и "читаемое" это отбор с условием where result = 'damaged'
+ exists в котором проверяешь, что для этого корабля, есть запись с бОльшей датой чем в основном запросе

2
или проявить "смекалку" :)
Код: sql
1.
2.
3.
4.
select ship
from ...
group by ship
having min(case when result = 'damaged' then [date] end) < max([date])
...
Рейтинг: 0 / 0
Сравнение записей в таблице
    #39901744
Crank_1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, Спасибо за ответ, будем пробовать)
...
Рейтинг: 0 / 0
Сравнение записей в таблице
    #39901751
Crank_1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось, ключевым оказалось то, что нужно для искать дату для ЭТОГО же корабля, чего я не делал, хотя, блин это очевидно)
Еще раз спрасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сравнение записей в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]