Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление записей исключая не полностью выбранных, Не обновляя неполностью выбранные записи 
:(
    Опции темы
SotGE
  Дата 11.6.2013, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2013

Репутация: нет
Всего: нет



Есть записи у которых есть номера и есть подномеры, допустим записи:

Дата создания | Дата изменения | Номер | Подномер

02.06.2013 | 06.06.2013 | 1 | 1
02.06.2013 | 07.06.2013 | 1 | 2
02.06.2013 | 08.06.2013 | 1 | 3

03.06.2013 | 07.06.2013 | 2 | 1
03.06.2013 | 08.06.2013 | 2 | 2

04.06.2013 | 06.06.2013 | 3 | 1
04.06.2013 | 07.06.2013 | 3 | 2

Допустим (сегодня 09.06.2013), мы выбрали записи за последнии 3 дня, 09.06.2013 включительно:

02.06.2013 | 07.06.2013 | 1 | 2
02.06.2013 | 08.06.2013 | 1 | 3

03.06.2013 | 07.06.2013 | 2 | 1
03.06.2013 | 08.06.2013 | 2 | 2

04.06.2013 | 07.06.2013 | 3 | 2

Эти записи выбраны по дате изменения, выбрали мы последнии записи, нужно присвоить им в параметр STATUS, значение DELETED, НО не всем, только тем у которых вабрана вся запись по номеру, т.е. вся запись целиком, в данном случае нельзя присваивать записям по номерам 1 и 3, а вот номеру 2 нужно присвоить этот статус, т.к. запись выбрана целиком все подномеры данного номера.

Если же мы выбираем записи за последнии 4 дня, то в данном случае мы выбрали все записи по 06.06.2013

02.06.2013 | 06.06.2013 | 1 | 1
02.06.2013 | 07.06.2013 | 1 | 2
02.06.2013 | 08.06.2013 | 1 | 3

03.06.2013 | 07.06.2013 | 2 | 1
03.06.2013 | 08.06.2013 | 2 | 2

04.06.2013 | 06.06.2013 | 3 | 1
04.06.2013 | 07.06.2013 | 3 | 2

и проверяем выбраны ли все записи с данными номерами, если нет, то не присваиваем им значение, если да то присваеваем, в данном случае всем присваеваем статус DELETED.

А теперь пример выборки:


Код

SELECT 
        MAX(dbo.weighet.MODIFY_DATE) AS MODIFY_DATE,
        MAX(dbo.weighet.WEIGHET_NO) AS WEIGHET_NO,
        MAX(dbo.weighet.WEIGHET_PART) AS WEIGHET_PART,
        dbo.weighet.CREATED
    FROM dbo.weighet
    WHERE DATEDIFF(DAY,dbo.weighet.MODIFY_DATE,GETDATE())<=14
        AND dbo.weighet.WEIGHET_NO=dbo.weighet.WEIGHET_NO
        AND dbo.weighet.CREATED=dbo.weighet.CREATED
        AND dbo.weighet.STATUS<>N'DELETED'
    GROUP BY CREATED ORDER BY WEIGHET_PART DESC


Не уверен в правильности работы, я выбрал все записи у которых нет статуса DELETED и те записи у которых номера WEIGHET_NO равны и даты создания CREATED тоже равны (т.к. возможно через какое-то время может создастся такая же запись с таким же номером, но дата создания будет другая). Сортировал я их по подномеру WEIGHET_PART, а вот сгруппировал их по дате создания для удобства, в UPDATE наверняка такое не нужно. MODIFY_DATE - это дата изменения

мне нужно подобное сделать с UPDATE, что-то типо такого:


Код

UPDATE dbo.weighet
SET STATUS = N'DELETED', MODIFY_DATE=GETDATE()
WHERE DATEDIFF(DAY,dbo.weighet.MODIFY_DATE,GETDATE())<=14
AND dbo.weighet.STATUS<>N'DELETED'


Но с условием, выше описанным, что нельзя удолять те записи которые не выбраны полностью, т.е. с этими же номерами и датами создания, если хоть 1 запись не входит в период времени, то она не удоляется, т.е. не присваевает им значения DELETED 
PM MAIL   Вверх
Akina
Дата 11.6.2013, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

...
and number = (
select number
from table
group by number
having count(subnumber) = 3
)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SotGE
Дата 11.6.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2013

Репутация: нет
Всего: нет



Цитата(Akina @ 11.6.2013,  11:26)
Код

...
and number = (
select number
from table
group by number
having count(subnumber) = 3
)

а если подномеров может быть N (бесконечно) колличество?
PM MAIL   Вверх
Zloxa
Дата 11.6.2013, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(SotGE @  11.6.2013,  12:11 Найти цитируемый пост)
только тем у которых вабрана вся запись по номеру, т.е. вся запись целиком


Код

UPDATE t
SET STATUS = N'DELETED', MODIFY_DATE=GETDATE()
from dbo.weighet as t
WHERE --DATEDIFF(DAY,dbo.weighet.MODIFY_DATE,GETDATE())<=14
      -- чтобы мог быть испльзован индекс, если он есть, условие переписываем так, 
      -- чтобы столбец в критерии отбора не был аргументом функции
      t.MODIFY_DATE >= DATEADD(DAY,-14,GETDATE())
      and t.MODIFY_DATE <= DATEADD(DAY,14,GETDATE())

      AND t.STATUS<>N'DELETED'
      -- проверяем, что для отобранной строки отсутствуют активные записи вне заданного диапазона
      and not exists (select null 
                        from dbo.weighet as s 
                        where t.[номера]= s.[номера] 
                             and (s.MODIFY_DATE<DATEADD(DAY,-14,GETDATE())
                                  or s.MODIFY_DATE>DATEADD(DAY,14,GETDATE())
                             AND s.STATUS<>N'DELETED'
                     )



Это сообщение отредактировал(а) Zloxa - 11.6.2013, 12:02


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
SotGE
Дата 11.6.2013, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2013

Репутация: нет
Всего: нет



Цитата(Zloxa @  11.6.2013,  11:44 Найти цитируемый пост)
where t.[номера]= s.[номера]


Можно пожалуйста поподробнее здесь
PM MAIL   Вверх
Zloxa
Дата 11.6.2013, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(SotGE @ 11.6.2013,  12:53)
Цитата(Zloxa @  11.6.2013,  11:44 Найти цитируемый пост)
where t.[номера]= s.[номера]


Можно пожалуйста поподробнее здесь

stfg коррелированный подзапрос


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 11.6.2013, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(SotGE @  11.6.2013,  12:36 Найти цитируемый пост)
если подномеров может быть N (бесконечно) колличество? 

Получи его подзапросом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.