Изучите два столбца и удалите младший номер идентификатора столбца с именем contentid - PullRequest
0 голосов
/ 29 мая 2019

Данные поступают из:

SELECT 
    CONTENTID, t1.TITLE, t1.PAGEID, COUNT, SPACENAME, CREATIONDATE, LASTMODDATE, VERSION 
FROM
    (SELECT 
         SPACEID, TITLE, PAGEID, COUNT(*) AS COUNT
     FROM 
         CONTENT
     WHERE 
         CONTENTTYPE = 'ATTACHMENT'
     GROUP BY 
         TITLE, PAGEID, SPACEID
     HAVING 
         COUNT(TITLE) > 1 AND COUNT(PAGEID) > 1) t1
JOIN
    (SELECT 
         CONTENTID, CREATIONDATE, LASTMODDATE, VERSION, TITLE, PAGEID 
     FROM 
         CONTENT 
     WHERE 
         VERSION = 1) t4 ON t4.PAGEID = t1.PAGEID
JOIN
    (SELECT 
         SPACEID, SPACENAME 
     FROM 
         SPACES) t2 ON t1.SPACEID = t2.SPACEID 
ORDER BY 
    t1.PAGEID,t1.TITLE, CREATIONDATE, LASTMODDATE

Вывод (удалены некоторые столбцы, потому что это только первые два, необходимые для принятия решения о том, что удалять, и их легче отобразить здесь):

CONTENTID   TITLE
--------------------------------------------
26902677    Time Logging Guidelines V5.docx
46170401    Time Logging Guidelines V5.docx
157909073   Time Logging Guidelines V5.docx
157909072   Time Logging Guidelines V5.docx
355860497   Time Logging Guidelines V5.docx
535953771   Time Logging Guidelines V5.docx
540117589   Time Logging Guidelines V5.docx
554729950   Time Logging Guidelines V5.docx
1246646     Induction Plan Template.docx
472350756   Induction Plan Template.docx
535953845   Induction Plan Template.docx
544508546   Induction Plan Template.docx
544508547   Induction Plan Template.docx

Мне нужно удалить все, кроме самого высокого содержания для каждого заголовка.На самом деле существует около 66k строк этого типа исправления

Конечный результат для вывода выше:

554729950   Time Logging Guidelines V5.docx
544508547   Induction Plan Template.docx

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Если я вас правильно понимаю, это просто:

<code>DELETE FROM CONTENT WHERE CONTENTID NOT IN (SELECT MAX(CONTENTID) FROM CONTENT GROUP BY TITLE)
0 голосов
/ 29 мая 2019

Не совсем уверен, что вы хотите. Я не уверен, какова цель объединения. Если все, что вам нужно, это удалить все записи, ожидая самое высокое CONTENTID, вы можете попробовать это

WITH cte AS (
    SELECT *
        , ROW_NUMBER() OVER(PARTITION BY TITLE ORDER BY CONTENTID DESC) AS rn
    FROM Content
)
DELETE FROM cte
WHERE rn > 1
0 голосов
/ 29 мая 2019

Один из способов - использовать ROW_NUMBER() для генерации числа для каждой строки данных и PARTITION для убывания столбца TITLE. Это даст вам номер 1 для самого высокого CONTENTID для каждого заголовка. Затем вы можете удалить все, что не имеет номера строки 1.

Вот пример.

-- create a temp table to store the test data
IF OBJECT_ID('tempdb..#test_data') IS NOT NULL DROP TABLE #test_data 
CREATE TABLE #test_data (
    content_id INT NOT NULL, 
    title VARCHAR(100) NOT NULL
)

-- add the test data
INSERT INTO #test_data
SELECT 26902677    , 'Time Logging Guidelines V5.docx'
UNION SELECT 46170401    , 'Time Logging Guidelines V5.docx'
UNION SELECT 157909073  , 'Time Logging Guidelines V5.docx'
UNION SELECT 157909072  , 'Time Logging Guidelines V5.docx'
UNION SELECT 355860497  , 'Time Logging Guidelines V5.docx'
UNION SELECT 535953771  , 'Time Logging Guidelines V5.docx'
UNION SELECT 540117589  , 'Time Logging Guidelines V5.docx'
UNION SELECT 554729950  , 'Time Logging Guidelines V5.docx'
UNION SELECT 1246646      , 'Induction Plan Template.docx'
UNION SELECT 472350756  , 'Induction Plan Template.docx'
UNION SELECT 535953845  , 'Induction Plan Template.docx'
UNION SELECT 544508546  , 'Induction Plan Template.docx'
UNION SELECT 544508547  , 'Induction Plan Template.docx';

-- generate an row number for each row of the data
WITH ordered AS (
    SELECT
        content_id, 
        title,
        ROW_NUMBER() OVER (PARTITION BY title ORDER BY content_id DESC) AS row_num
    FROM 
        #test_data
        )

-- delete all the rows that are not equal to 1
DELETE d
FROM #test_data d
INNER JOIN ordered o ON d.content_id = o.content_id AND o.row_num > 1

-- check the results
SELECT * FROM #test_data 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...