#mysql #sql #mysql-workbench
#mysql #sql #mysql-workbench
Вопрос:
Я в основном пытаюсь получить краткий обзор политики, относящийся к определенному учреждению, которое имеет определенный тип политики, и это должна быть самая последняя политика.
Я выписал SQL-запрос, и при выполнении ошибки нет, однако он не извлекает никаких данных, когда должно быть получено хотя бы одно данные.
Ниже приведен мой запрос:
select synopsis
from policy p
left outer join institution_has_policy ihp
on p.policy_id = ihp.policy_id
left outer join institution i
on i.institution_id = ihp.institution_id
where p.policy_type_id = 5
and i.institution_name = 'SSgA Funds Management, Inc.'
and current_as_of_date = (select max(current_as_of_date) from policy p);
Правильно ли мое утверждение sql?
Комментарии:
1. Я бы сказал, что что-то в вашем where неверно. Выводите инструкции до тех пор, пока не появится ваш элемент, который сузит круг ваших проблем. Я бы сказал, либо в названии учреждения, либо в вашей дате.
2. Запрос выглядит нормально. Удалите его и запускайте по частям за раз, начиная только с политики.
3. Я сделал, как вы предложили, он будет запускаться и отображать данные до тех пор, пока я не вставлю последнее предложение where (currentet_as_of_date), тогда данные не отображаются
Ответ №1:
Это ваш запрос:
select synopsis
from policy p left outer join
institution_has_policy ihp
on p.policy_id = ihp.policy_id left outer join
institution i
on i.institution_id = ihp.institution_id
where p.policy_type_id = 5 and
i.institution_name = 'SSgA Funds Management, Inc.'
current_as_of_date = (select max(current_as_of_date) from policy p);
Данные не возвращаются, поскольку максимальное значение на дату не соответствует политике и названию учреждения. Если вы хотите, чтобы возвращалась только одна строка, вы можете использовать order by
и limit
для получения последней:
select synopsis
from policy p left outer join
institution_has_policy ihp
on p.policy_id = ihp.policy_id left outer join
institution i
on i.institution_id = ihp.institution_id
where p.policy_type_id = 5 and
i.institution_name = 'SSgA Funds Management, Inc.'
order by current_as_of_date desc
limit 1;
Ответ №2:
Это неверно, поскольку весьма возможно, что выбранная вами политика не будет фактически самой последней политикой (из всех, а не из всех отфильтрованных). Вы можете попробовать удалить ограничение даты, упорядочить его по дате и выбрать только первую строку (ОГРАНИЧЕНИЕ 1).
Комментарии:
1. О, значит, моя политика фильтруется неправильно. Итак, прямо сейчас мой оператор sql ищет тип политики 5, но в то же время ищет ЛЮБОЙ тип политики с самой текущей датой. именно поэтому не отображаются какие-либо данные. Это правильно?
2. Да, точно. Вам нужно будет повторить весь запрос в (ВЫБЕРИТЕ MAX (date) ….), чтобы он работал таким образом. Однако использование упорядочения и ОГРАНИЧЕНИЯ 1 — лучший способ сделать это.