|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Такой вопрос наверное задавали,но у меня мало знаний найти оптимальный и правильный ответ. Упрощено есть две таблицы, расходов и приходов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В каждый день могут быть несколько приходов/расходов, а может быть ни одного. ======================| in_id | in_date | in_summa |======================| 1 |15.01.2019| 100 |-------------------------------------| 2 |17.01.2019| 150 |-------------------------------------| 3 |17.01.2019| 100 |-------------------------------------| 4 |19.01.2019| 150 |-------------------------------------| 5 |21.01.2019| 100 |---------------------------------- --======================| out_id | out_date |out_summa |======================| 1 |16.01.2019| 200 |--------------------------------------| 2 |17.01.2019| 50 |--------------------------------------| 3 |18.01.2019| 100 |--------------------------------------| 4 |19.01.2019| 150 |--------------------------------------| 5 |19.01.2019| 150 |-------------------------------------- Нужно вывести одним запросом сгруппированные данные по датам и расходам/приходам. Делаю так Код: sql 1. 2. 3. 4. 5. 6.
автор=================== | cdate | csumma | psumma | ============================ | 15.01.2019 | null | 100 | ------------------------------------------------- | 16.01.2019 | 200 | null | ------------------------------------------------- | 17.01.2019 | 50 | null | ------------------------------------------------- | 17.01.2019 | null | 100 | ------------------------------------------------- | 17.01.2019 | null | 150 | ------------------------------------------------- | 18.01.2019 | 100 | null | ------------------------------------------------- | 19.01.2019 | 150 | null | ------------------------------------------------- | 19.01.2019 | null | 150 | ------------------------------------------------- | 21.01.2019 | null | 100 | ------------------------------------------------- Хочется, чтобы в первой строке на каждую дату, если их больше одной, не было значения null. 19 числа была бы одна строка, а 17 две. Пока это обрабатываю в программе. Можно ли это сделать в одном запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 12:24 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoft Код: sql 1.
Какой смысл в дублировании? savsoft Код: sql 1.
Нафига это нужно? savsoftВ каждый день могут быть несколько приходов/расходовЧто-то я не вижу суммирования - от слова "вообще". savsoftМожно ли это сделать в одном запросе? Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 12:33 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Это опечатка, там GROUP BY i.cdate, i.csumma, i.psumma; Если делать GROUP BY i.cdate, то теряется инфа о каждом приходе/расходе. Суммарный отчет я так и сделал. А вот развернутый не могу, точнее получается непонятное количество строк двух таблиц. Хотелось бы избавится от избыточных null, если это возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 12:44 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoft, вряд ли возможно. Смысл группировок тоже неясен, правильнее дистинктами отсечь дубли и отсортировать по дате общий запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 12:56 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
paversavsoft, вряд ли возможно. Смысл группировок тоже неясен, правильнее дистинктами отсечь дубли и отсортировать по дате общий запрос. Это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:03 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoftтеряется инфа о каждом приходе/расходе.А надо детально? Тогда указывай точную версию сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:40 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
paverдистинктами отсечь дублиПосмотри на исходные данные. Это НЕ дубли. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:41 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Akinasavsoftтеряется инфа о каждом приходе/расходе.А надо детально? Тогда указывай точную версию сервера. Percona Server Версия сервера: 5.7.16-10-log - Percona Server (GPL), Release 10, Revision a0c7d0d ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 13:46 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoft , 5.7 - это плохо, оконные функции недоступны. Тогда читаем FAQ: Нумерация строк и другие вопросы про использование переменных , нумеруем записи в каждой таблице отдельно в группах по дате, после чего объединяем, и итоговый набор группим по дате и номеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 14:17 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Akina savsoft , 5.7 - это плохо, оконные функции недоступны. Тогда читаем FAQ: Нумерация строк и другие вопросы про использование переменных , нумеруем записи в каждой таблице отдельно в группах по дате, после чего объединяем, и итоговый набор группим по дате и номеру. Спасибо! Буду разбираться. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 14:23 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Akinapaverдистинктами отсечь дублиПосмотри на исходные данные. Это НЕ дубли. 4 и 5 строки второй таблицы - во вложенном селекте без айдишника дублируются. Именно эта пара и группируется в одну запись результата. Исходных записей 5+5, в результате - 9. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 14:30 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoftpaversavsoft, Смысл группировок тоже неясен, правильнее дистинктами отсечь дубли и отсортировать по дате общий запрос. Это как? Внутренние селекты снабдить инструкцией DISTINCT, группировку заменить на ORDER BY по дате. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 14:33 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
paver4 и 5 строки второй таблицы - во вложенном селекте без айдишника дублируются.Однако это не дубликаты, а два разных расхода - просто на одинаковую сумму. Объединять их в одну запись нельзя - баланс не сойдётся. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2019, 14:42 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Akinapaver4 и 5 строки второй таблицы - во вложенном селекте без айдишника дублируются.Однако это не дубликаты, а два разных расхода - просто на одинаковую сумму. Объединять их в одну запись нельзя - баланс не сойдётся. Конечно. Но ТС зачем-то именно это и делает с помощью группировки. Я просто предложил реализовать этот бред более подходящим инструментом. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 05:23 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
paverAkinaпропущено... Однако это не дубликаты, а два разных расхода - просто на одинаковую сумму. Объединять их в одну запись нельзя - баланс не сойдётся. Конечно. Но ТС зачем-то именно это и делает с помощью группировки. Я просто предложил реализовать этот бред более подходящим инструментом. Ну бред, не бред, а клиент всегда прав. Заказчик захотел именно такой отчет. Есть отчет сгруппированный по дням, то есть дата, клиент, сумма расхода за день, сумма прихода за день и т.д. А заказчик еще не захотел заглядывать в приходы и расходы и захотел такой отчет развернутым. Я сделал это двумя отдельными запросами и обработкой в программе. А вот одним запросом не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 13:16 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
savsoftЕсть отчет сгруппированный по дням, то есть дата, клиент, сумма расхода за день, сумма прихода за день и т.д. А заказчик еще не захотел заглядывать в приходы и расходы и захотел такой отчет развернутым. Я сделал это двумя отдельными запросами и обработкой в программе. А вот одним запросом не получилось. Второй отчет предполагает не группировку, а сортировку по дате. Группировкой вы убили одну из транзакций (расход в 150 у.е. за 19 число). Вряд ли заказчик имел это в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:16 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
paversavsoftЕсть отчет сгруппированный по дням, то есть дата, клиент, сумма расхода за день, сумма прихода за день и т.д. А заказчик еще не захотел заглядывать в приходы и расходы и захотел такой отчет развернутым. Я сделал это двумя отдельными запросами и обработкой в программе. А вот одним запросом не получилось. Второй отчет предполагает не группировку, а сортировку по дате. Группировкой вы убили одну из транзакций (расход в 150 у.е. за 19 число). Вряд ли заказчик имел это в виду. Но с сортировкой и юнион я получаю суммарное количество строк расхода и прихода. А нужно слить строки за один день. Дата ! Приход ! Расход --------------------------- д1 ! 100 ! null --------------------------- д1 ! 150 ! null --------------------------- д1 ! null ! 50 Вот третья строка должна слиться с первой, типа Дата ! Приход ! Расход --------------------------- д1 ! 100 ! 50 --------------------------- д1 ! 150 ! null --------------------------- ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:24 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
Ну так можно получать два отдельных набора, и на клиенте средствами генератора отчётов объединять их на основании номера записи в группе по дате - генератор просто обязан это позволять, ибо он работает с массивом либо коллекцией, где есть позиционность. Ну или, как по ссылке на FAQ, что я давал выше, делать всё то же на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:31 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
AkinaНу так можно получать два отдельных набора, и на клиенте средствами генератора отчётов объединять их на основании номера записи в группе по дате - генератор просто обязан это позволять, ибо он работает с массивом либо коллекцией, где есть позиционность. Ну или, как по ссылке на FAQ, что я давал выше, делать всё то же на сервере. Программно на клиенте я так и сделал. На примере получить номер записи у меня получилось, а вот на реальном примере пока нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:44 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
[quot savsoft]paverА нужно слить строки за один день. Я понял, что вы хотите представить отчет в специфической форме. Мне непонятно, почему из двух транзакций (4 и 5 во второй таблице) вы оставляете одну? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 14:53 |
|
Выборка из двух таблиц.
|
|||
---|---|---|---|
#18+
[quot paver]savsoftпропущено... Я понял, что вы хотите представить отчет в специфической форме. Мне непонятно, почему из двух транзакций (4 и 5 во второй таблице) вы оставляете одну? Это ошибка. Просто ПРИХОД считается по одним таблицам, а РАСХОД по другим. Общее у них дата и клиент. Если делать UNION ALL и группировать по дате, а отчет делается по одному клиенту, то все хорошо. А если в развернутом виде, то получаются строки с приходом и расходом нулл и строки с расходом и приходом нулл. А так как приходов/расходов может быть от 0 до нескольких за каждую дату, то хочется строки за дату, где есть и приход и расход объединить. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 15:11 |
|
|
start [/forum/topic.php?fid=47&fpage=41&tid=1829359]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
others: | 342ms |
total: | 529ms |
0 / 0 |