![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
Доброе время суток,
У меня есть таблица EQUIPMENT (оборудование) и CERTIFICATE (сертификаты) к этому оборудованию (каждое оборудование имеет несколько сертификатов) Имелся также и рабочий запрос (до некоторого времени) для выборки просроченных сертификатов, который выводит на экран список оборудования и один сертификат к каждому оборудованию, если в таблице CERTIFICATE поле DISPLAY = 1 (1-это отображение, 0 – скрытие сертификата) Код:
каждый сертификат имеет дату окончания, и статус актуализации CONTROL = 1 (1- серитификат актуален, 0 - сертификат не актуален) Зарос работал до некоторого времени, пока пользователь выставлял c.DISPLAY = 1, т.е. отбражать один из сертификатов в окне оборудования. (проблема появилась, когда сертификаты можно скрывать - не выводить на экран, но по ним всеравно есть контроль (CONTROL = 1)) И это мне помогало избавится от отображения дублей оборудования, т.к. могут быть несколько просроченных сертификатов у одного оборудования. Вопрос: можно ли до операции JOIN в выше указанном запросе, выбрать из таблицы CERTIFICATE по одному просроченному сертификату для каждого оборудования, и обязательно вывести на экран, даже если DISPLAY = 0. На рис. показано часть таблицы сертификатов относящиеся к двум оборудованием (с ID = 103 и 221) связка с табл. EQUIPMENT по полю DEVICE_ID_CL, Т.е. я хочу делать по этой таблице группировку по полю DEVICE_ID_CL с таким расчетом, что результатом должна быть строка с ID=951 (в которой DISPLAY = 1), а если в группе только DISPLAY = 0, то вывести сертификат с максимальным ID, т.е. 835 исходя из рисунка У меня группировка выходит только всегда с максимальным ID, т.е. как выбрать строку с ID = 951 - не выходит Заранее спасибо Последний раз редактировалось KBO; 06.02.2023 в 17:34. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 06.02.2023 в 09:29. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
Код не очень подошел...
- я использую FireBird 3.0 и там "top" - нет, вместо него взял "first" (если я вас правильно понял) - может я не правильно выразился, извиняюсь, но исходя из картинки результатом запроса должны быть строки с ID: 835 и 951 (максимум я и сам могу найти каждой группы) ) Разъяснение: - в кажой группе "DEVICE_ID_CL", может существовать только одна строка с c."DISPLAY"=1 (остальные строки в группе с значением "0"), а могут быть все с "0" в группе (т.е. с каждой группы сертификатов принадлежащих одному оборудованию, на экран выводится только один сертификат) - выбираем строки с значением c.CONTROL=1 - обязателен для каждой группы - если в группе строка с c."DISPLAY"=1 и c.CONTROL=1 - выводим эту строку (она может быть не с максимальным ID в группе) - если в группе c."DISPLAY"=0 (во всех строках группы), то выводим строку с c.CONTROL=1 - и с максимальным ID в группе Последний раз редактировалось KBO; 06.02.2023 в 17:13. |
![]() |
![]() |
![]() |
#4 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
, device, display Цитата:
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
|
|||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
да, независимо, - оно считается только для тех(той) групп(ы), в которой c."DISPLAY"=0 (во всех строках каждой группы) (для всех остальных групп, это группы там где есть DISPLAY=1 и CONTROL=1 - берется просто ID)
ага да (у каждой строки, может быть 0 или 1) P.S. Я чуть рисунок дополнил..., но результат остаётся тем же, ID: 835 и 951 Последний раз редактировалось KBO; 06.02.2023 в 17:37. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 06.02.2023 в 20:07. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
Спасибо!!! интересный алгоритм...
а я вчера думал про "merge" (как у вас, сначало выборка с DISPLAY = "0", потом с "1", а потом слить их по "DEVICE_ID_CL") Последний раз редактировалось KBO; 07.02.2023 в 00:47. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
Единственное что, мне кажется тут нужно не join применять, т.к. группировка по DEVICE - их нельзя сравнинвать, потому что это разные группы DEVICE, в одном случае в группе DISPLAY=0, в другом в группе - DISPLAY=1 - просто не будет объединения... а будут исключения
Результаты этих запросов получается нужно сложить. Скорее всего union необходим, чтоб собрать все DEVICE Последний раз редактировалось KBO; 07.02.2023 в 02:03. |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.02.2023 в 09:26. |
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 11.06.2010
Сообщений: 525
|
![]()
Сейчас буду разбираться.
Я ошибся с union Последний раз редактировалось KBO; 07.02.2023 в 14:37. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ввожу сначало 10 цифр по порядку и заполняю массив потом он сортируется и после стоит цикл вывода этих отсортированных чисел | ROMAN_ShARP | C# (си шарп) | 4 | 05.03.2020 08:27 |
DBLookupComboBox и join –значения сначало пропадают, потом появляются | KBO | Помощь студентам | 0 | 13.11.2018 02:00 |
Группировка значений по критерию и их объединение и запись в строку | kwns | Microsoft Office Excel | 1 | 28.06.2018 23:37 |
Синтаксическое дерево (парсер) - сначала раскрываем модуль, потом перетаскиваем известное и неизвестное, потом решаем. | skidline | Помощь студентам | 1 | 14.06.2013 20:16 |
Вычислить количество недель сначало года | Alexandr- | Помощь студентам | 0 | 02.04.2013 15:22 |