Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 11:48   #1
SotGEGDS
Новичок
Джуниор
 
Регистрация: 14.10.2012
Сообщений: 2
Вопрос Как обновить последние записи за определенный срок не обновляя не законченные записи?

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

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

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

Последний раз редактировалось Stilet; 11.06.2013 в 12:01.
SotGEGDS вне форума Ответить с цитированием
Старый 11.06.2013, 12:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
целиком все подномеры данного номера
Что это? Видимо имеется ввиду, что если по номеру выбрано N записей, то нумерация под-номеров должна быть с 1 до N без пропусков и уникальна в рамках номера? Если это так, то для подтверждения только этого факта нужно считать COUNT, MAX и MIN таких записей в рамках номера в предположении, что уникальность обеспечена. Чет не вижу в запросе такой проверки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.06.2013, 13:42   #3
SotGEGDS
Новичок
Джуниор
 
Регистрация: 14.10.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Что это? Видимо имеется ввиду, что если по номеру выбрано N записей, то нумерация под-номеров должна быть с 1 до N без пропусков и уникальна в рамках номера? Если это так, то для подтверждения только этого факта нужно считать COUNT, MAX и MIN таких записей в рамках номера в предположении, что уникальность обеспечена. Чет не вижу в запросе такой проверки
В том то и дело, что незнаю как сделать подобное
SotGEGDS вне форума Ответить с цитированием
Старый 11.06.2013, 14:39   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT W1.*
  FROM weighet W1,
    (SELECT WEIGHET_NO,CREATED,COUNT(*) AS CountPart,MIN(WEIGHET_PART) AS MinPart,MAX(WEIGHET_PART) AS MaxPart
       FROM weighet
       WHERE DATEDIFF(DAY,MODIFY_DATE,GETDATE())<=14 AND STATUS<>N'DELETED'
       GROUP BY WEIGHET_NO,CREATED) W2
  WHERE DATEDIFF(DAY,W1.MODIFY_DATE,GETDATE())<=14 AND W1.STATUS<>N'DELETED' AND
        W1.WEIGHET_NO=W2.WEIGHET_NO AND W1.CREATED=W2.CREATED AND
        W2.MinPart=1 AND W2.MaxPart=W2.CountPart
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить записи из таблицы, если дата в записи старше 30 дней Aleksandr БД в Delphi 10 28.03.2013 21:33
Программа на определенный срок -=Ивашка=- Общие вопросы Delphi 40 28.01.2013 20:39
Оцените математической формулой, насколько больше цифр в двоичной записи большого числа, чем в его десятичной записи. Анюта.Хом Помощь студентам 1 02.12.2011 23:13
Запрос на последние записи SERG1980 БД в Delphi 5 17.11.2010 17:02
Необхоима подборка данных за определенный срок koma Общие вопросы Delphi 3 01.10.2009 14:08