2014-11-14 3 views
0

Я хотел бы сделать SQL-запрос, но он не работает. Вот как моя таблица выглядитSQL LAST plus WHERE, не дающий нужного результата

Client|Product|Amount| 
    A | P1 | 5 | 
    A | P1 | 7 | 
    A | P1 | 3 | 
    A | P2 | 8 | 
    A | P2 | 0 | 
    A | P2 | 5 | 
    A | P3 | 9 | 
    A | P3 | 0 | 

Я хотел бы задать запрос, который обеспечил бы мне список последних записей для каждого клиента и каждого продукта, который больше 0. Результат должен выглядеть следующим образом:

Client|Product|Amount| 
    A | P1 | 3 | 
    A | P2 | 5 | 

Я попытался с помощью этого кода

SELECT Client,Product, LAST(Amount) 
FROM Table 
WHERE Amount>0 
GROUP BY Client,Product 

Но я получаю этот выход:

Client|Product|Amount| 
    A | P1 | 3 | 
    A | P2 | 5 | 
    A | P3 | 9 | 

Любые идеи, как это решить?

+1

Я предполагаю, что от использования 'последнего()', что вы используете MS Access. Вы должны соответствующим образом пометить вопрос. –

+0

Возможно, требуется ORDER BY http://office.microsoft.com/en-au/access-help/HV080761079.aspx * Они просто возвращают значение указанного поля в первой или последней записи, соответственно, из набора результатов возвращенный запросом. Поскольку записи обычно возвращаются в каком-либо определенном порядке (если запрос не включает предложение ORDER BY), записи, возвращаемые этими функциями, будут произвольными * По этой причине эти функции бесполезны для GROUP BY (потому что часто вы хотите заказать поле, которое вы не группируете по дате). –

+0

@GordonLinoff: Oracle имеет 'last()' [также] (https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions083.htm#SQLRF00653) –

ответ

0

Используйте having положение:

SELECT Client, Product, LAST(Amount) 
FROM Table 
GROUP BY Client, Product 
HAVING LAST(Amount) > 0; 
0
SELECT Client,Product, LAST(Amount) 
FROM Table 
WHERE product IN (SELECT product 
       FROM table) and LAST>0 
GROUP BY Client, Product 
Смежные вопросы