Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос из двух таблиц / 8 сообщений из 8, страница 1 из 1
15.03.2016, 11:45:45
    #39192066
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
Помогите, пожалуйста, составить правильный запрос по следующим данным -

таблица t1 (список дел) имеет поля:
'id' - дело
'awarded_date' - дата принятия решения.

таблица t2 (оплаты по делам) имеет поля:
'case_id' - id делa
'case_id2' - id делa (т.к. часть оплаты может идти на другое дело)
'payment_date' - дата оплаты
'sum_payment' - оплата по 1-му делу
'sum_payment2' - оплата по 2-му делу
записей оплат может быть несколько на каждое дело.

В запросе надо выбрать все дела и суммы оплат, которые были по каждому делу до даты принятия решения.
Что-то типа такого (нерабочее):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT id,awarded_date,sum_by_id
FROM t1
LEFT JOIN
	(SELECT case_id,case_id2,SUM(CASE WHEN (case_id=t1.id) THEN sum_payment ELSE 0 END)+SUM(CASE WHEN (case_id2=t1.id) THEN sum_payment2 ELSE 0 END) sum_by_id
	FROM t2
	WHERE payment_date<t1.awarded_date
	) t
ON (t.case_id=t1.id OR t.case_id2=t1.id)
...
Рейтинг: 0 / 0
15.03.2016, 11:49:04
    #39192073
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
структуру второй таблицы сочинял тот же надмозг, который придумывал задачки для sql-ex?
...
Рейтинг: 0 / 0
15.03.2016, 11:50:48
    #39192076
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
tanglirструктуру второй таблицы сочинял тот же надмозг, который придумывал задачки для sql-ex?
БД такая досталась по наследству :(
...
Рейтинг: 0 / 0
15.03.2016, 11:53:38
    #39192083
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
Напишите 2 отдельных запроса - по case_id и по case_id2, и ссуммируйте их.
Хотя много лучше - нормализовать таблицу t2.
...
Рейтинг: 0 / 0
15.03.2016, 13:34:44
    #39192234
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
Akina,
ок, забудем про case_id2, но даже так не могу составить рабочий запрос. У меня затык в
Код: sql
1.
SUM(CASE WHEN (case_id=t1.id) THEN sum_payment ELSE 0 END)


как передать в JOIN значение t1.id? Да и на t1.awarded_date ругается...
Не поможете с запросом? Что писать в JOIN, не понимаю :(
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT id,awarded_date,sum_by_id
FROM t1
LEFT JOIN
	(SELECT case_id,case_id2,SUM(CASE WHEN (case_id=t1.id) THEN sum_payment ELSE 0 END) sum_by_id
	FROM t2
	WHERE payment_date<t1.awarded_date
	) t
ON t.case_id=t1.id
...
Рейтинг: 0 / 0
15.03.2016, 14:18:28
    #39192313
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
Сорри, это я затупил... JOIN вообще не нужен. Вот так все считает и вроде даже правильно :)
Код: sql
1.
2.
3.
4.
5.
6.
SELECT id,awarded_date,
	(SELECT SUM(CASE WHEN (case_id=t1.id) THEN sum_payment ELSE 0 END) 
	FROM t2
	WHERE payment_date<awarded_date
	) sum_by_id
FROM t1


Поправьте, если что-то не так.
...
Рейтинг: 0 / 0
15.03.2016, 14:22:00
    #39192319
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
LiYingУ меня затык вУ Вас, извините за грубость, незнание самых минимальных основ, усугублённое нежеланием понять, что Вам ответили, а вовсе даже не затык.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT t1.id, SUM(payments.payment) payment
FROM t1
LEFT JOIN
(
    SELECT t1.id id, SUM(t2.sum_payment) payment
    FROM t1, t2
    WHERE t1.id=t2.case_id
      AND t1.awarded_date>t2.payment_date
    GROUP BY t1.id
  UNION ALL
    SELECT t1.id, SUM(t2.sum_payment2)
    FROM t1, t2
    WHERE t1.id=t2.case_id2
      AND t1.awarded_date>t2.payment_date2
    GROUP BY t1.id
) payments 
  ON t1.id=payments.id
GROUP BY t1.id


Ежели где недостаток алиасов (ambiquous reference) - добавите самостоятельно.
Писано от руки, возможны ошибки. Разберётесь в логике - исправите.
...
Рейтинг: 0 / 0
15.03.2016, 14:35:08
    #39192348
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из двух таблиц
Akina,
Спасибо, буду разбираться.
Насчет остального:
1) структуру БД нельзя трогать, потому про нормализацию можно забыть.
2) про два отдельных запроса - да, не понял, что Вы имели в виду, извините.
3) незнание самых минимальных основ - БД и запросы несколько не моя специализация, но вынужден заниматься. Потому и прошу помощи на форуме и учусь, разве не для этого они (форумы) созданы?
В любом случае, благодарю за урок.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос из двух таблиц / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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