2015-08-25 2 views
0

У меня есть одна таблица ABC, которая имеет 1 Milion + строки:Mysql - Удалить все, кроме 2-х рядов всех post_id1 из таблицы

post_id1 post_id2 count 
    22  100218  1 
    22  100225  2 
    22  100432  1 
    22  100719  5 
    22  100807  4 
    22  100827  3 
    22  100934  22 
    22  101322  1 
    27  101613  10 
    27  101931  1 
    29  103783  1 
    29  104328  16 
    29  104345  1 
    29  104356  7 

В этой таблице я просто хочу, чтобы держать 2 строки каждого значения post_id1 (любой два ряда)

Как выход будет

post_id1 post_id2 count 
    22  100218  1 
    22  100225  2 
    27  101613  10 
    27  101931  1 
    29  103783  1 
    29  104328  16 

Что SQL-запрос я должен работать?

post_id1 может быть любым числом.

Благодаря

+0

Ур post_id2 уникален? или есть шанс повторить? – Crazy2crack

+0

post_id2 уникален в каждом post_id2. то же сообщение post_id1 не может иметь такой же post_id2, который не является рядом. –

+0

Да, это нормально. Решение для решения (которое я отправил) не помогло? – Crazy2crack

ответ

0

Предполагая, что ваш postid_2 уникален, как показано на примере. Вы можете использовать приведенный ниже запрос для удаления.

delete from test 
where post_id2 not in (select post_id2 
from (
     select post_id2 from test 
     where (select count(*) from test as t where 
      t.post_id1=test.post_id1 and 
      t.post_id2>=test.post_id2)<=2) t); 

Здесь я отсортирован на основе post_id2 (отображается верхний максимум 2). Вы можете проверить DEMO HERE в SQLFIDDLE

0

Вам необходимо пользовательские переменные для хранения количества строк каждого post_id1 возвратов. Этот запрос отслеживает количество найденных post_id1 и сохраняет их в переменной строк. Затем он ограничивает выход, где NumRows < = 2.

SET @rows = NULL, @prevID = NULL; 
SELECT post_id1, post_id2, count FROM (
    SELECT 
     post_id, post_id2, count, 
     @rows := IF(@prevID = post_id1, @rows + 1, 1) AS numRows, 
     @prevID := post_id1 
FROM test 
) AS temp WHERE numRows <= 2 

Ссылка на sqlfiddle для вас, чтобы проверить запрос сам является here.

+0

Я хотел удалить все строки из post_id1, кроме 2 строк. Расскажите, как удалить из таблицы. Вышеприведенная команда перечисляет новую таблицу. Мне нужен запрос, который я могу запустить в phpMyadmin. Извините, что я новичок. –

Смежные вопросы