2016-05-17 2 views
-1

Я хочу группировать данные с максимально возможной контрактной_идностью относительно конкретного player_id. Это звучит достаточно просто, но он не работает должным образом.MYSQL Groupby и Orderby Query

SELECT distinct(f1.player_id), f1.contract_id,f1.feature_id 
from (select p.player_id,p.player_name, p.player_no, CASE c.action 
when 'submit' then 'تقديم' 
when 'approve' then 'موافقة' 
when 'reject' then 'رفض' 
when 'object' then 'اعتراض' 
when 'resubmit' then 'اعادة تقديم' 
END as action, c.new_time, Case co.status 
when 'free' then 'حر' 
when 'active' then 'نشط' 
when 'expired' then 'منتهي' 
when 'loan' then 'معار' 
when 'loan expire' then 'ااعارة منتهية' 
END as status, co.contract_id,c.feature_id 
FROM contract co 
INNER JOIN player_profile p ON p.player_id = co.player_id 
INNER JOIN new_request c ON c.contract_id = co.contract_id 
INNER JOIN club cl ON co.club_id = cl.club_id 
where co.reqeust_type='new' 
) as f1 
order by f1.player_id asc; 

Набор данных: Полный набор данных

Full Data Set

SELECT distinct(f1.player_id), f1.contract_id,f1.feature_id 
from (select p.player_id,p.player_name, p.player_no, CASE c.action 
when 'submit' then 'تقديم' 
when 'approve' then 'موافقة' 
when 'reject' then 'رفض' 
when 'object' then 'اعتراض' 
when 'resubmit' then 'اعادة تقديم' 
END as action, c.new_time, Case co.status 
when 'free' then 'حر' 
when 'active' then 'نشط' 
when 'expired' then 'منتهي' 
when 'loan' then 'معار' 
when 'loan expire' then 'ااعارة منتهية' 
END as status, co.contract_id,c.feature_id 
FROM contract co 
INNER JOIN player_profile p ON p.player_id = co.player_id 
INNER JOIN new_request c ON c.contract_id = co.contract_id 
INNER JOIN club cl ON co.club_id = cl.club_id 
where co.reqeust_type='new' 
) as f1 
group by f1.player_id 
order by f1.player_id asc; 

набор данных для запроса
data set for query 2

Я хочу чтобы получить Player_ID 7 и контракт ID 301.

+0

Что именно вы подразумеваете под этим, что он не работает должным образом? Pls обеспечивает ожидаемый результат и результат, возвращаемый двумя запросами! – Shadow

+0

Обратите внимание, что DISTINCT не является функцией. – Strawberry

ответ

1

Рассмотрим ваши «базовый» подзапрос:

SELECT p.player_id,p.player_name, p.player_no, 
CASE c.action 
    when 'submit' then 'تقديم' 
    when 'approve' then 'موافقة' 
    when 'reject' then 'رفض' 
    when 'object' then 'اعتراض' 
    when 'resubmit' then 'اعادة تقديم' 
END as action, 
c.new_time, 
CASE co.status 
    when 'free' then 'حر' 
    when 'active' then 'نشط' 
    when 'expired' then 'منتهي' 
    when 'loan' then 'معار' 
    when 'loan expire' then 'ااعارة منتهية' 
END as status, 
co.contract_id, 
c.feature_id 
FROM contract co 
    INNER JOIN player_profile p ON p.player_id = co.player_id 
    INNER JOIN new_request c ON c.contract_id = co.contract_id 
    INNER JOIN club cl ON co.club_id = cl.club_id 
WHERE co.reqeust_type='new' 

Если вы хотите, чтобы получить высокий contract_id на игрока, вы должны сделать MAX(contract_id) и GROUP BY игрока, как это

SELECT MAX(co.contract_id), 
    p.player_id,p.player_name, p.player_no, 
CASE c.action 
    when 'submit' then 'تقديم' 
    when 'approve' then 'موافقة' 
    when 'reject' then 'رفض' 
    when 'object' then 'اعتراض' 
    when 'resubmit' then 'اعادة تقديم' 
END as action, 
c.new_time, 
CASE co.status 
    when 'free' then 'حر' 
    when 'active' then 'نشط' 
    when 'expired' then 'منتهي' 
    when 'loan' then 'معار' 
    when 'loan expire' then 'ااعارة منتهية' 
END as status, 
co.contract_id, 
c.feature_id 
FROM contract co 
    INNER JOIN player_profile p ON p.player_id = co.player_id 
    INNER JOIN new_request c ON c.contract_id = co.contract_id 
    INNER JOIN club cl ON co.club_id = cl.club_id 
WHERE co.reqeust_type='new' 
GROUP BY co.player_id 

Затем, вы можете получить только игрок вашей покупки от этого запроса, как это:

SELECT * 
FROM 
(
SELECT MAX(co.contract_id) AS contractid, 
    p.player_id,p.player_name, p.player_no, 
CASE c.action 
    when 'submit' then 'تقديم' 
    when 'approve' then 'موافقة' 
    when 'reject' then 'رفض' 
    when 'object' then 'اعتراض' 
    when 'resubmit' then 'اعادة تقديم' 
END as action, 
c.new_time, 
CASE co.status 
    when 'free' then 'حر' 
    when 'active' then 'نشط' 
    when 'expired' then 'منتهي' 
    when 'loan' then 'معار' 
    when 'loan expire' then 'ااعارة منتهية' 
END as status, 
co.contract_id, 
c.feature_id 
FROM contract co 
    INNER JOIN player_profile p ON p.player_id = co.player_id 
    INNER JOIN new_request c ON c.contract_id = co.contract_id 
    INNER JOIN club cl ON co.club_id = cl.club_id 
WHERE co.reqeust_type='new' 
GROUP BY co.player_id 
) T 
WHERE player_id = 7 
+0

Спасибо, Томас работал отлично. –

+0

@SyedAbdullahAly рад прочитать. Но если он ответит на вопрос, отметьте его как принятый, пожалуйста;) –