|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Добрый день! Есть запрос который формирует данные с двумя столбцами Name и M: Name M 1 1 1 1 221 221 221 221 3234 3234 3234 434 434 434 и.т.д Нужно в поле M записать значение от 1 до 3 по порядку и так до конца датасета, что бы получилось что то типа: Name M 1 1 1 1 1 1 1 1 221 2 221 2 221 2 221 2 3234 3 3234 3 3234 3 434 1 434 1 434 1 и.т.д Я так понимаю, что нужно сравнить значение по строкам по полю Name, и если значение поменялось, записать в поле M необходимое число. Подскажите пожалуйста как это реализовать в запросе. Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 14:52 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Если исходный набор данных - запрос, то в рамках запроса MS Access решение этой задачи весьма проблематично. Тут нет ранжирующих функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 15:03 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Aziz, почему в вашем примере для трех групп нумерация идет с нарастанием, а для 434 снова 1, а не 4 ? Подобные задачи решаются применением собственной функции, в которой полученное значение сравнивается с сохраненным предыдущим значением по результату оставляет или меняет предыдущее значение счетчика. Для какой цели вам нужна такая экзотика? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 15:44 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Akina, А создать таблицу и записать датасет запроса в нее? Это может помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 15:44 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Экзотика - это точное определение )). Попытаюсь объяснить: Есть запрос, который выдает датасет с полями (Объект, Наименование оборудования на объекте, январь, февраль, и т.д до декабря.) В поле "Объект" - наименование объекта обслуживания В поле "Наименование оборудования на объекте" - наименование оборудования по данному объекту подлежащее тех.обсл. в полях "Январь". "Февраль" и т.д. - наименование вида проводимого тех.обслуживания (ТО-1, ТО-2, ТО-3). Так получается, что по месяцам кол-во проводимого ТО по объекту сильно отличается (В январе например 0, а в марте может быть 30). А если объектов много, то в по некоторым месяцам ТО проводиться не будет (например январь), а по некоторым придется проводить ТО по всему перечню оборудования (например март). Особо загруженные месяцы - Март, Июнь, Сентябрь, Декабрь Поэтому решил добавить еще одно поле "М", по которому буду использовать оператор MOD("Поле M", 3) и в зависимости от результата заносить нужное значение в поля "Январь". "Февраль" и т.д. и таким образом получиться распределить нагрузку по месяцам. Вот как то так. Надеюсь смог объясниить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 16:16 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
AzizА создать таблицу и записать датасет запроса в нее? Статическую таблицу несложно открыть как рекордсет и перенумеровать VBA-кодом. Но есть подвох - у Вас в примере данные явно сортированы, причём по некоему признаку, который в итоговый набор данных не попал. А потому нет никакой гарантии, что в рекордсете порядок выдачи записепй не будет изменён. Необходимо добавить в статическую таблицу признак, который соответствующим ORDER BY позволит сохранить порядок следования записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 16:19 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Aziz....В поле "Наименование оборудования на объекте" - наименование оборудования по данному объекту подлежащее тех.обсл... Стесняюсь спросить:а как определяется подлежит или нет-ведь должны быть какие-то сроки,нормы,к-во циклов и т.п.(а вот об этом нет ни слова) Если же периодичность ТО определяется "когда хочется", то степень автоматизации учета ТО не может быть высокой (что Вы и пытаетесь делать) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 17:50 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
sdku, Согласен с вами, есть и сроки и нормы. Не стал об этом писать. Суть вопроса та не в этом... Попробую внести ясность. Есть справочник ТО в котором указано оборудование и его периодичность ТО в год, где ТО-1 раз в месяц, ТО-2 раз в квартал, ТО-3 раз в год, например: ТО электронного датчика ТО-1 8раз ТО-2 3раза ТО-3 1раз ТО регулятора температуры ТО-1 2раза ТО-2 2раза ТО электронного термопреобразователя. ТО-1 11раз ТО-2 1раз ТО датчика температуры ТО-1 8раз ТО-2 3раза ТО-3 1раз Кол-во ТО для оборудования определено справочником, и набор типа 8-3-1, 2-2, 11-2 и т.д. ограничен. Я составил запрос и раскидал все возможные варианты по месяцам. Max(Switch(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1")) AS Январь, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Февраль, Max(Switch(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=4),"ТО-2")) AS Март, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=2) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Апрель, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Май, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",IIf(([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=2) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=4),"ТО-2",Null))) AS Июнь, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Июль, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Август, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",IIf(([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=3) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=4),"ТО-2",Null))) AS Сентябрь, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=2) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Октябрь, Max(IIf(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=8) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=10) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=11) Or ([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",Null)) AS Ноябрь, Max(Switch(([Запрос ПП ТО].VidTO="ТО-1" And [Запрос ПП ТО].KolvoTO=12),"ТО-1",([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=1) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=2) Or ([Запрос ПП ТО].VidTO="ТО-2" And [Запрос ПП ТО].KolvoTO=4),"ТО-2",([Запрос ПП ТО].VidTO="ТО-3" And [Запрос ПП ТО].KolvoTO=1),"ТО-3")) AS Декабрь И в принципе меня это устраивает, но по некоторым месяцам (март, июнь, сентябрь, декабрь) кол-во ТО которое нужно провести, вырастает в разы по отношению к другим месяцам. Поэтому и родилась идея добавить поле "М" которое будет состоять из значений от 1 до 3. А используя оператор MOD("Поле M", 3) я смогу заново сформировать и распределить нагрузку по месяцам. Надеюсь смог все объяснить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 09:19 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Aziz, А почему не прибавлять сроки(периоды)к дате ввода в эксплуатацию,а полученное значение будет, хошь-не хошь, жесткой,не подлежащей изменению, датой проведения ТО ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 11:39 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
sdku, как вариант. Но тогда придется добавлять в таблицу поле "дата ввода в эксплуатацию объекта", а хотелось бы все сделать на уровне запроса. Я так понимаю, что задача как мне хотелось бы не реализуема. Поэтому вижу ее решение 1.Записать все в таблицу. 2. Всю задумку реализовать на VB. Может еще есть мнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 11:50 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
вопрос: если ТО по периодичности 1 раз в год и я проведу его 30.12.10 и 10.01.11-будет ли верным утверждение что оно проведено в 10 и 11 году с соблюдением периодичности (именно это Вы пытаетесь сделать) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 11:51 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
sdku, да, верно. Но если мою идею получиться реализовать, то периодичность ТО будет соблюдена. Идея то банальна - разделить все объекты на три группы и сдвинуть начальную дату выполнение ТО по каждой группе объектов. Т.е.: 1 группа - все ТО которое изначально попало на (март, июнь, сентябрь, декабрь) месяц, я перевожу в январь, апрель, июль, сентябрь. 2 группа - все ТО которое изначально попало на (март, июнь, сентябрь, декабрь) месяц, я перевожу в февраль, май, август, ноябрь. 3 группа - все ТО которое изначально попало на (март, июнь, сентябрь, декабрь) месяц, остается в этом же месяце. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 13:18 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
интервал 11д. интервал почти 2 года 30.12.2010 10.01.11. 31.12.2012 так вот почему лифты падают (может через год,а не раз в год?) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 13:55 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
А что мешает сгруппировать Name во временной таблице. там же пронумеровать второй столбец 1-2-3 а потом из неё заполнить М в базовой таблице? Вроде всё элементарно... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 14:04 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
982183, А можете показать на примере? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 14:12 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
982183, Спасибо за подсказку. Все получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 17:00 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
А как "пронумеровать" сделал? Что-то через целочисленные остаток от деления recno() у меня не получается. Только через case ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 02:14 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
AzizА если объектов много, то в по некоторым месяцам ТО проводиться не будет (например январь), а по некоторым придется проводить ТО по всему перечню оборудования (например март). Особо загруженные месяцы - Март, Июнь, Сентябрь, Декабрь я знакома с подобной задачей (сначала ППР, затем ТОиР) я исходила из --межремонтного периода(у меня были еще и КР и СР) --структуры цикла цикла осмотров типа 1333323333233331 --даты и типа последнего осмотра/ремонта находила в каком месте цикла находится данное оборудование и присваивала планируемые осмотры поэтому так явно Март, Июнь, Сентябрь, Декабрь не выделялись ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 07:50 |
|
Сравнение текущей строки с предыдущей
|
|||
---|---|---|---|
#18+
Aziz, по правде говоря, я не поняла идеи прохождения по циклу осмотров Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2017, 08:02 |
|
|
start [/forum/topic.php?fid=45&msg=39527247&tid=1612054]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 448ms |
0 / 0 |