2014-09-09 3 views
0

У меня есть MySQL запросов:MySQL: Выберите порядок строк по дате с группой по

SELECT * FROM customer_wallet 
WHERE credit_balance<0 
GROUP BY cus_id 
ORDER BY date_added DESC 

Он должен дать мне последние добавленные детали с помощью cus_id с credit_balance < 0. Но это дает мне первый отрицательный баланс один ,

Он будет работать, если я удалю GROUP BY из моего запроса. Но мне нужно сохранить это, поскольку все клиенты находятся в одной таблице.

Это SQL Fiddle.

credit_balance должен быть -50. Не -111.

+0

Я полагаю, вы не понимаете, как работает группа, вы хотите, чтобы все последние транзакции для каждого пользователя? –

+0

есть. с 'credit_balance <0' –

+0

SELECT * FROM customer_wallet ORDER BY id DESC LIMIT 1; – Strawberry

ответ

1

вот собственно вопрос:

SELECT * 
FROM customer_wallet as a 
inner join 
(
    select max(id) as maxid 
    from customer_wallet 
    WHERE credit_balance<0 
    group by cus_id 
) as b 
on (a.id=b.maxid) 

Примечание: этот запрос работает, потому что обычно данные вставляются постепенно, и мы можем предположить, что мы можем использовать идентификатор вместо даты

+0

Да. Отлично. Спасибо @Lashane –

0

Есть несколько способов, вы можете сделай это. С одной стороны, попробуйте следующее:

SELECT cw.* 
FROM (
    SELECT * 
    FROM customer_wallet 
    WHERE credit_balance < 0 
    ORDER BY date_added DESC 
) cw 
GROUP BY cw.cus_id; 

Вы можете также использовать MAX() на DATE_ADDED:

SELECT credit_balance, date_added 
FROM customer_wallet 
WHERE credit_balance < 0 
GROUP BY cus_id 
ORDER BY MAX(date_added) DESC; 

Любой из тех, кто должен работать для вас.

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