powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работа с датой, MySQL
6 сообщений из 6, страница 1 из 1
Работа с датой, MySQL
    #39547780
ALEX0802
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, столкнулся с интересной(опытным вряд ли она покажется интересной) задачкой. Ищу помощи в ее решении, ибо у самого опыта пока не хватает.
Начальные условия:
Имеется таблица subscriptions, с входящими в нее полями идентификатора sb_book и срока выдачи книг sb_start(тип данных у sb_start - Date).
Задача звучит так:
Показать идентификаторы и даты выдачи книг за первый год работы библиотеки (первым годом работы библиотеки считать все даты с первой выдачи книги по 31-е декабря(включительно) того года, когда библиотека начала работать).

Пытался сделать ее таким образом, однако синтаксис SQL не позволяет этого сделать:
Код: sql
1.
2.
3.
select sb_book, sb_start from subscriptions 
where sb_start >= (select min(sb_start) from subscriptions) and
sb_start <= (select max(sb_start) from subscriptions where year(sb_start) = year(select min(sb_start) from subscriptions)); 


То есть я нахожу минимальную дату среди всех дат в поле sb_ start - начало года и пытаюсь найти максимальную дату среди тех, год которых совпадает с годом минимальным, но sql не позволяет выполнить последний подзапрос.
...
Рейтинг: 0 / 0
Работа с датой, MySQL
    #39547784
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если данных мало, то сойдет так:
Код: sql
1.
2.
3.
SELECT *
FROM subscriptions
WHERE YEAR(sb_start) = (SELECT YEAR(MIN(sb_start)) FROM subscriptions)



Если данных много, то лучше так:
Код: sql
1.
2.
3.
SELECT *
FROM subscriptions
WHERE sb_start < (SELECT MAKEDATE(YEAR(MIN(sb_start))+1,1) FROM subscriptions)

И понадобится индекс по полю sb_start или начинающийся с него.
...
Рейтинг: 0 / 0
Работа с датой, MySQL
    #39547863
ALEX0802
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, Большое спасибо! Скажите, плохой ли практикой является решение данного рода задач двумя запросами? Т.е. если бы в одном запросе я нашел минимальную дату, посмотрел на год и выполнил бы другой запрос с учетом найденного года в прошлом запросе?
...
Рейтинг: 0 / 0
Работа с датой, MySQL
    #39547911
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEX0802Скажите, плохой ли практикой является решение данного рода задач двумя запросами? Т.е. если бы в одном запросе я нашел минимальную дату, посмотрел на год и выполнил бы другой запрос с учетом найденного года в прошлом запросе?Без необходимости лучше так не делать. Но в качестве учебного варианта сойдет.
...
Рейтинг: 0 / 0
Работа с датой, MySQL
    #39547955
ALEX0802
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, Спасибо!
...
Рейтинг: 0 / 0
Работа с датой, MySQL
    #39547988
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftБез необходимости лучше так не делать.
Ну да, придётся же транзакции изучать, их изоляцию. Тяжко...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работа с датой, MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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