Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Uksus
13 / 13 / 9
Регистрация: 27.09.2010
Сообщений: 53
1

Запрос "Сколько книг состояло в статусе взят на заданный период"

01.04.2014, 23:34. Просмотров 541. Ответов 3
Метки нет (Все метки)

Здравствуйте!

Есть две таблицы. Одна учет книг, а вторая статус книги.

Таблица учета книг Account:
id client_id book_id status_id data
1 5 3 1 2014-02-28
2 5 3 2 2014-03-07
3 3 10 1 2014-03-10
4 4 2 1 2014 -03-31
5 4 2 2 2014-03-31
6 5 3 1 2014-03-31
4 5 3 2 2014-04-01

Таблица статс книги Status:
id name
1 взята
2 сдана
3 порвана

Необходимо написать запрос, который подсчитывает сколько книг состояло в статусе взят на заданный период, например, за 31.03.2014.

Мое предположение сделать запрос full outer join:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(SELECT takenAccount.client_id,  passedAccount
FROM Account takenAccount
INNER JOIN STATUS takenStatus ON takenStatus.id = takenAccount.status_id
LEFT JOIN Account passedAccount ON takenAccount.client_id = passedAccount.client_id
INNER JOIN passedStatue ON passedAccount.status_id = passedStatus.id AND passedStatus.name = 'сдана'
WHERE 
takenStatus.name = 'взята' AND
DATE(takenAccount) < DATE('2014-04-01') AND
(passedAccount.id IS NULL OR DATE(passedAccount.begDate) > DATE('2014-03-31')))
UNION
(SELECT takenAccount.client_id,  passedAccount
FROM Account takenAccount
INNER JOIN STATUS takenStatus ON takenStatus.id = takenAccount.status_id
RIGHT JOIN Account passedAccount ON takenAccount.client_id = passedAccount.client_id
INNER JOIN passedStatue ON passedAccount.status_id = passedStatus.id AND passedStatus.name = 'сдана'
WHERE 
takenStatus.name = 'взята' AND
DATE(takenAccount) < DATE('2014-04-01') AND
(passedAccount.id IS NULL OR DATE(passedAccount.begDate) > DATE('2014-03-31')))
В результате этого запроса возвращаются только книги, которые были взяты и сданы, а книги, которые не были сданы не возвращаются.
Задумка была такая: получить два столбца клиенты, которые взяли книги и клиенты, которые сдали книги. сделать их объединение и посчитать уникальные.
Выслушаю и другие приложения. Буду рада, если подскажите ошибку в моем запросе.
Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 23:34
Ответы с готовыми решениями:

Определите, сколько имеется книг, название которых заканчивается сочетанием "сказки"
Помогите пожалуйста!!! Решить одну и ту же задачу, организуя список, очередь и стек. В поле...

Сколько разных "слов" можно получить из слова "АБРАКАДАБРА"? Сколько из них начинаются с буквы "K"? В скольких из них обе буквы "Б" стоят рядом?
Сколько разных &quot;слов&quot; можно получить из слова &quot;АБРАКАДАБРА&quot;? Сколько из них начинаются с буквы &quot;K&quot;?...

Напишите программу, которая подсчитывает, сколько учащихся получило "2", "3", "4" и "5"
Помогите, пожалуйста, с решением следующей задачи: учащиеся сдают экзамены по нескольким...

периодически зависает апач, много процессов в статусе "W"
Добрый день :flirt:. Прошу помощи гуру форума. Перелопатила гугл, голова кругом, выхода не нашла....

Заполнить период используя календари ("от" и "до") и выбрать человека использую выпадающий список
Здравствуйте, подскажите пожалуйста макрос, который будет вызывать форму при клике по ячейке &quot;H5&quot;,...

3
Uksus
13 / 13 / 9
Регистрация: 27.09.2010
Сообщений: 53
03.04.2014, 02:15  [ТС] 2
спасибо! Но такой вариант мне не подходит. т.к. между статусами взята и сдана. могут находится и другие.
0
cygapb-007
1309 / 941 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
03.04.2014, 10:57 3
Цитата Сообщение от Uksus Посмотреть сообщение
спасибо! Но такой вариант мне не подходит. т.к. между статусами взята и сдана. могут находится и другие.
Цитата Сообщение от Uksus Посмотреть сообщение
Необходимо написать запрос, который подсчитывает сколько книг состояло в статусе взят на заданный период, например, за 31.03.2014.
Еще раз:
для каждой книги ищется последняя дата в таблице учета, не превышающая 31.03.2013
среди найденных последних упоминаний книг ищутся все со статусом "взята"
подсчитывается количество таких книг

Что неправильно?

Или нужно подсчитать количество взятых книг с утра 31.03.2013 до ночи 31.03.2013 ?
0
igor_fl
63 / 63 / 28
Регистрация: 18.03.2014
Сообщений: 794
Завершенные тесты: 2
03.04.2014, 11:08 4
SQL
1
SELECT COUNT(*) FROM `Account` WHERE `status_id` = '1' AND DATA = '2014-03-31'
Извиняюсь, фигню написал, не дочитав вопроса....
0
03.04.2014, 11:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 11:08

Превратить рациональную дробь в десятичную. Возможен период. "1/3" должна превратиться в "0.(3)"
Превратить рациональную дробь в десятичную. Возможен период. &quot;1/3&quot; должна превратиться в &quot;0.(3)&quot;

Определить сколько "5", "4", "3", "2" было выставлено в каждом классе
известны оценки за контрольную по физике каждого ученика двух классов. Определить сколько &quot;5&quot;, &quot;4&quot;,...

Подсчитать сколько раз в тексте встречаются буквы "л" и "а" стоящие отдельно.заменитьь все буквы "л" на "77"
Задача.Подсчитать сколько раз в тексте встречаются буквы &quot;л&quot; и &quot;а&quot; стоящие отдельно.заменитьь все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru