powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Решение задач
8 сообщений из 8, страница 1 из 1
Решение задач
    #40097481
polignomt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Есть Бд Библиотека.
Книги:
- ID книги
- Название
- Автор
- Издательство
- Год издания
- Город издания

Экземпляры книг:
- ID экземпляра
- ID книги

Выдачи книг:
- ID экземпляра
- Дата выдачи
- Дата возврата
- № читательского билета
Читатели:
- № читательского
- Фамилия
- Имя
- Отчество
- Дата рождения
Нужно найти читателя, который за последний месяц брал больше всего книг в библиотеке.
Если читателей с максимальным количество несколько - вывести только тех, у кого самый маленький возраст. Написал вот такой запрос и не пойму, что не так

WITH table2 AS ( SELECT name, second_name, book_ID, num_card, (YEAR(CURRENT_DATE) - YEAR(birth)) - (DATE_FORMAT(CURRENT_DATE AS age, '%m%d') < DATE_FORMAT(birth, '%m%d')) FROM clients INNER JOIN books_out ON clients.num_card = books_out.num_card WHERE date > DATE_SUB(CURRENT_DATE, 31 DAY) AND date < CURRENT_DATE )

SELECT name, second_name FROM
(SELECT name, second_name, COUNT(book_ID) AS quant, num_card,age
FROM table2 GROUP BY second_name, name, num_card HAVING MIN(age))A WHERE A.quant = (SELECT MAX(quant) FROM A AND
...
Рейтинг: 0 / 0
Решение задач
    #40097519
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
polignomt,

попробуйте так:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT TOP 1 
	v_books.[№ читательского билета]
	,readers.[Фамилия]
	,readers.[Имя]
	,readers.[Отчество]
	,DATEDIFF(DAY, readers.[Дата рождения], GETDATE()) AS [age_days]
	,COUNT(*) AS [Выдано книг]
FROM [Выдачи книг] v_books
INNER JOIN [Читатели] readers
	ON v_books.[№ читательского билета] = readers.[№ читательского]
WHERE v_books.[Дата выдачи] >= DATEADD(DAY, - 31, GETDATE())
GROUP BY v_books.[№ читательского билета]
	,readers.[Фамилия]
	,readers.[Имя]
	,readers.[Отчество]
	,DATEDIFF(DAY, readers.[Дата рождения], GETDATE())
ORDER BY 6 DESC
	,5 ASC
...
Рейтинг: 0 / 0
Решение задач
    #40097537
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Va,

а как же "... вывести только тех , у кого самый маленький возраст..."
...
Рейтинг: 0 / 0
Решение задач
    #40097541
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

так, вроде, отсортирует по количеству книг по убыванию и по возрасту - по возрастанию
...
Рейтинг: 0 / 0
Решение задач
    #40097561
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Va,

"тех" - это не 1 запись. Их может быть и 2 и даже 3 ...
...
Рейтинг: 0 / 0
Решение задач
    #40097564
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

возможно

я почему-то решил что

самый маленький возраст - может быть только один
...
Рейтинг: 0 / 0
Решение задач
    #40097568
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Va,

Код: sql
1.
SELECT TOP 1 WITH TIES ...
...
Рейтинг: 0 / 0
Решение задач
    #40097571
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

согласен, спасибо )
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Решение задач
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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