2015-04-09 2 views
0

Я пытаюсь ограничить строки для каждой группы результатов. Каким образом это можно сделать. Объясняя случай ниже:Ограничить строки в SQL для каждой группы с помощью соединений

Table1: Customer_Details

Customer ID Vandeur pid_01 Vandeur pid_02 Vandeur pid_03 Vandeur pid_04 Vandeur pid_01 Vandeur pid_02 Vandeur pid_03 Vandeur pid_04 Vandeur pid_05

Table2: Month_Details

Month ID Jan pid_01 Jan pid_02 Jan pid_03 Jan pid_04 Feb pid_01 Feb pid_02 Feb pid_03 Feb pid_04 Feb pid_05

Мое требование выход - я хочу только первые 3 идентификаторы каждого месяца customer Vandeur

Образец O/P:

Customer Month ID Vandeur Jan pid_01 Vandeur Jan pid_02 Vandeur Jan pid_03 Vandeur Feb pid_01 Vandeur Feb pid_02 Vandeur Feb pid_03

Может кто-то мне предложить пути ее достижения.

+0

Что такое MySQL ** я **? –

+0

Извините, это было пропущено. исправленный. Вы знаете способы сортировки моей проблемы? – user3624000

+0

Небольшой намек http://stackoverflow.com/questions/22677781/showing-users-who-liked-an-item-in-an-item-list –

ответ

2

Mysql не поддерживает оконные функции, как и другие СУБД, чтобы получить н результаты в группе вы можете использовать определяемые пользователем переменные

SELECT DISTINCT c.Customer,m1.`Month`,c.ID 
FROM Customer_Details c 
JOIN (
    SELECT m.*, 
    @r:= CASE WHEN @g = `Month` THEN @r +1 ELSE 1 END rank, 
    @g:=`Month` 
    FROM `Month_Details` m , 
    (SELECT @g:=NULL,@r:=NULL) r 
    ORDER BY m.`Month` DESC ,REPLACE(m.ID,'pid_','') * 1 
    ) m1 ON(c.ID = m1.ID) 
    WHERE m1.rank <=3 
AND c.Customer= 'Vandeur' 
ORDER BY m1.`Month` DESC ,REPLACE(m1.ID,'pid_','') * 1 

DEMO

+1

Упрощенный, Халид! –

+0

O/p не ограничивает 3. Я мог видеть весь набор значений. ''Vandeur', 'Feb', 'pid_01' 'Vandeur', 'Feb', 'pid_01' 'Vandeur', 'Feb', 'pid_02' 'Vandeur', 'Feb', 'pid_02' ' Vandeur ',' Feb ',' pid_03 ' ' Vandeur ',' Feb ',' pid_03 ' ' Vandeur ',' Jan ',' pid_01 ' ' Vandeur ',' Jan ',' pid_01 ' ' Vandeur ' , 'Jan', 'pid_02' 'Vandeur', 'Jan', 'pid_02' 'Vandeur', 'Jan', 'pid_03' 'Vandeur', 'Jan', 'pid_03' ' – user3624000

+0

@ user3624000 мой плохое использование и инициализация переменных с помощью NULL –

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