Удалить дубликаты в SQL-запросе MS Access - PullRequest
0 голосов
/ 22 июля 2011

A) предположим, что таблица. что я хочу выполнить функцию УДАЛИТЬ. Это сделано в MS Access 2003 SQL-запрос. ПРИМЕЧАНИЕ Есть много много много много записей. в нескольких сотнях тысяч ... до миллионов диапазонов. так что, надеюсь, будет ли код, который хорошо справляется с большим набором данных. есть только 3 типа настроения.

 DayNumber   Mood
     1       Mad
     2       Sad
     2       Happy 
     2       Sad
     3       Sad 
     3       Happy

когда есть несколько настроений в один день, мы хотим сохранить только самое важное. так что давайте иметь функцию удаления для удаления дубликатов дней. сначала удаляя менее важные настроения. Важность настроений счастливая> безумная> грустная. Итак, я хочу:

 DayNumber   Mood
     1       Mad
     2       Happy
     3       Happy 

B) Сначала я начал легче, без трех вариантов настроения, но два. где Happy> Грустно

 DayNumber   Mood
     1       Sad
     2       Sad
     2       Happy 
     3       Sad 
     3       Happy

Где я в идеале получу

 DayNumber   Mood
     1       Sad
     2       Happy 
     3       Happy

Неважно, если вы делаете первый пример или secodn для меня, я застрял в любом случае!

Это то, что у меня есть для второго вопроса до сих пор .. btu это не работает, потому что у меня есть агрегатная функция в предложении where.

DELETE FROM Table
WHERE (Mood='Sad') and (COUNT(DayNumber)=2);

Ответы [ 2 ]

1 голос
/ 22 июля 2011
DELETE FROM Table where Mood='Sad' AND DayNumber IN (SELECT DayNumber FROM Table WHERE Mood = 'Happy')
1 голос
/ 22 июля 2011

Если у вас небольшое и фиксированное количество настроений, вы можете настроить иерархию следующим образом:

DELETE FROM Table a
WHERE
(a.Mood='Sad' 
AND EXISTS
  (SELECT 1
   FROM Table b
   WHERE b.DayNumber = a.DayNumber
   AND b.Mood in ('Happy','Mad')))
OR
(a.Mood = 'Mad'
AND EXISTS
  (SELECT 1
   FROM Table c
   WHERE c.DayNumber = a.DayNumber
   AND c.Mood = 'Happy')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...