|
|
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Сразу к вопросу: Есть таблица со следующими полями: ID - номер п/п, Date_Year - дата ремонта, Type - тип ремонта. Так вот при расчете очередного ремонта, вносятся данные в эту таблицу. Ремонты могут быть трех видов К- капитальный, С- средний, Т- текущий. Каждый тип ремонта рассчитывается по своему правилу, после того как все ремонты посчитаны нужно выполнить следущую т.н. "чистку": Приоритет ремонтов (по убыванию): К (самый важный); С (менее важный); Т (выполняется если нет среднего или капитального). Следовательно, проверяем если все три ремонта выпали в один месяц, то нужно оставить только Капитальный. Если в одном месяце есть только Капитальный и Средний, то опять оставляем Капитальный. А в случае "попадания" в один месяц Среднего и Текущего, оставляем Средний. Остальные записи должны быть удалены... Т.е. в месяц фактически выполняется только какой-либо один ремонт. Как это сделать в одном запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 10:54:24 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Используй поле тип (раз уж так все хорошо сложилось) - ищи минимальное значение min(type) c необходимым уровнем группировки. А дальше удаляй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 11:08:43 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
С помощью подзапроса - выбираешь те которые надо оставить и удаляешь те которые не входят в подзапрос примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вот так примерно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 11:23:37 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. А так не получится! Или это не првильно?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 11:29:21 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Можно сказать с Type повезло так как select ascii('К'),ascii('С'),ascii('Т') значения будут по нарастающей отсюда, сохраняем таблицу select DatePart(year,Date_Year) as y, DatePart(month,Date_Year) as m, char( min( ascii(Type) )) as t into #YearMonth from [ремонты] group by DatePart(year,Date_Year), DatePart(month,Date_Year) затем находим максимальный ID, а не сразу как советуют DAO select m,y, max([ремонты].id) as maxid into #save from [ремонты], #YearMonth where DatePart(year,Date_Year) = y and DatePart(month,Date_Year) = m and Type=t group by m,y и теперь имея нужнуй ID удаляем лишние записи delete from [ремонты] where not exists(select s.maxid from #save as s where s.maxid=[ремонты].id) вот тока в один запрос не вышло, а надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 11:58:09 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
То: Flint-San. В первом запросе пропустил выбор поля ID для добалвения во временную таблицу #YearMonth. А так вроде то, что нужно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 12:15:30 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Alexis ничего я не пропустил! Смотри код внимательней! вот тебе начало тестового кода create table [ремонты] ( ID int Identity(1,1) PRIMARY KEY, Date_Year smalldatetime, Type char(1) CHECK( Type Like 'К' or Type Like 'С' or Type Like 'Т') ) go insert into [ремонты](Date_Year,Type) values('01.01.2002','Т') insert into [ремонты](Date_Year,Type) values('01.01.2002 08:00','С') insert into [ремонты](Date_Year,Type) values('01.02.2002','К') insert into [ремонты](Date_Year,Type) values('01.03.2002','К') insert into [ремонты](Date_Year,Type) values('02.01.2002','Т') insert into [ремонты](Date_Year,Type) values('02.01.2002 08:00','С') insert into [ремонты](Date_Year,Type) values('03.01.2002','Т') go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 12:18:37 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
select ID,Date_Year,max(ascii(Type )) from table group by ID,Date_Year ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 12:51:15 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Alexis дай плиз код создания своей таблицы + 10 последовательных записей в ней MiCe и чего добьешься ты своим кодом? Из задачи: Следовательно, проверяем если все три ремонта выпали в один месяц, то нужно оставить только Капитальный. Если в одном месяце есть только Капитальный и Средний, то опять оставляем Капитальный. А в случае "попадания" в один месяц Среднего и Текущего, оставляем Средний. То есть я так понимаю, что в начале клиент внес информацию что у него идет просто ремонт 'Т', через 8часов он соображает что уже началась новая смена а у него все ремонт и добавил запись что ремонт у него 'С' а на следущий день бригадой порешили что пора переходить на Капитальный. Вот еще и не забудем что это может быть и этом и впрошлом году. Я прав Alexis? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 13:06:30 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Thanks a lot MiCe. Your query is the most approach and rather effective. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 13:15:17 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
Нет Flint-San, немного не то. Дело в том, что эти ремонты - это план на год. И рассчитываются они тоже на год. Каждая единица оборудования (прибор) может быть отремонтирован в соответствии с нормативами. Я уже просчитал, теперь в таблице есть даты ремонтов на год. И мне нужно было просто провести "чистку", т.е. удалить только те, в которых в один месяц было несколько ремонтов и оставить высший по приоритету. Т.е. группировка нужна по ID и по типу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 13:18:47 |
|
||
|
Удаление ненужных записей...
|
|||
|---|---|---|---|
|
#18+
вообще то группировка тут совсем не нужна, надо просто удалить такие записи за каждый месяц, у которых есть аналогичные с более высоким приоритетом Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 20:23:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32069536&tid=1818677]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
21ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 316ms |

| 0 / 0 |
