|
|
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Всем привет. Прошу сильно не пинаться за возможно мелкий вопрос. Просто туплю и не могу вспомнить. Есть проблемка в работе след. кода Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Значение COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) суммируется столько раз, сколько записей в D_DOCUMENT Помогите исправить. Плиз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 10:58 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
HadroranЕсть проблемка в работе след. кода ... Значение COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) суммируется столько раз, сколько записей в D_DOCUMENT Помогите исправить.Код работает правильно. Можете не благодарить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 11:24 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Вот именно. Несколько раз. А надо тока один :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 12:06 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
HadroranЗначение COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) суммируется столько раз, сколько записей в D_DOCUMENT Код: sql 1. 2. 3. если у вас DOC.D_NUMBER уникален для каждой записи в D_DOCUMENT. то количество групп будет равно количеству записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 12:42 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Только сейчас заметил: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Запихивание одного поля в груп бай и в агрегатную функцию редко бывает осмысленным действием. Уточните заодно, что именно вы ждете в результате и сделайте тестовые данные. А что за СУБД, кстати? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 12:42 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
DOC.D_NUMBER не уникален для каждой записи в D_DOCUMENT и может повторяться несколько раз, поэтому тех записях, где DOC.D_NUMBER имеет одно или несколько, но разных значений, результаты запроса удовлетворяют. Но если DOC.D_NUMBER имеет несколько одинаковых значений и они все максимальные, то COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) работает столько раз, сколько есть этих одинаковых максимальных значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:14 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Никанор КузьмичТолько сейчас заметил:[src] А что за СУБД, кстати? Firebird 2.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 13:15 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Тема актуальна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 17:03 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Используйте подзапросы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2017, 17:08 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
HadroranDOC.D_NUMBER не уникален для каждой записи в D_DOCUMENT и может повторяться несколько раз, поэтому тех записях, где DOC.D_NUMBER имеет одно или несколько, но разных значений, результаты запроса удовлетворяют. Но если DOC.D_NUMBER имеет несколько одинаковых значений и они все максимальные, то COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) работает столько раз, сколько есть этих одинаковых максимальных значений.Кто вас только русскому языку учил! Я раз пять перечитал, но так ничего и не понял. Вот это: "COALESCE(SUM(IORD.VD_OUTSUM) * ORD.D_DELSTAT, 0) работает столько раз, сколько есть этих одинаковых максимальных значений" - что значит? "Работает столько раз" = "выдает столько строк"? Или как вы считаете эти "разы"? Вот для начала: у вас в секции GROUB BY перечислены 8 разных полей. Вы в курсе, что если у вас одному и тому же значению DOC.D_NUMBER соответствуют, например, 3 разных значения ORD.ID_CODE, то у вас будет в результате 3 строки с одинаковым DOC.D_NUMBER? А в курсе, как сделать так, чтобы осталось по одной строке на один DOC.D_NUMBER? И вообще, не тратьте время зря. Приведите пример данных. Не обязательно реальных, не обязательно 100500 строк. 3 - 4 строки - пример того, что получается сейчас, 3 - 4 строки - какой результат хочется видеть. И в двух словах, чем они друг от друга отличаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2017, 00:43 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
А где проектирование БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2017, 16:45 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Никанор КузьмичВот для начала: у вас в секции GROUB BY перечислены 8 разных полей. Вы в курсе, что если у вас одному и тому же значению DOC.D_NUMBER соответствуют, например, 3 разных значения ORD.ID_CODE, то у вас будет в результате 3 строки с одинаковым DOC.D_NUMBER? А в курсе, как сделать так, чтобы осталось по одной строке на один DOC.D_NUMBER?. Бинго!!! Вот именно это и имелось в виду! Вот теперь КАК сделать так, чтобы осталось по одной строке на один DOC.D_NUMBER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 16:12 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
А это зависит от того, какие у вас данные и структура таблиц. Не зная этого, можно только посоветовать убрать из GROUP BY все поля, кроме DOC.D_NUMBER. (Можно еще посоветовать почитать учебник, но что-то мне подсказывает, что вы не будете) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 16:30 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Сильно урезал код для общего понимания Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Результат запроса следующий (рис 1). Значение в поле COALESCE должно быть в 2 раза меньше, т.к. в таблице D_DOCUMENT на наш ID есть две записи (рис 2). В идеале запрос должен выводить сумму с максимальным значением поля DOC.D_NUMBER но только один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 10:15 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
HadroranЗначение в поле COALESCE должно быть в 2 раза меньше, т.к. в таблице D_DOCUMENT на наш ID есть две записи (рис 2).Значит надо переписать запрос так, чтобы одна из строк отсеивалась. Например, в секцию WHERE условие или подзапрос или еще что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 10:55 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Вот куда добавить условие о максимальном значение поля даты и времени таблицы D_DOCUMENT? По идее только так можно оставить одну строку и тогда вообще уйти от поиска макс.значения поля DOC.D_NUMBER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 11:08 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
HadroranВот куда добавить условие о максимальном значение поля даты и времени таблицы D_DOCUMENT?Например, в подзапрос. Который сначала вернет только нужные строки из таблицы, а потом сджойнится с остальными. HadroranПо идее только так можно оставить одну строкуА это от вашей СУБД зависит. В оракле я наверно 3 - 4 способа назову, как сделать это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 11:34 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
СУБД - Firebird. Инструмент IBExpert. Вот запрос, который работает как надо. Код: sql 1. 2. 3. помогите добавить его, но теоретически в запросе нужен только d_number. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 12:49 |
|
||
|
Про макс.значение поля
|
|||
|---|---|---|---|
|
#18+
Задача решена: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2017, 14:35 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39445343&tid=1540180]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 478ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...