2016-10-14 4 views
2

У меня есть данные, как это:состояние группы в последней MySQL данных

Table LOT 
+-------+--------+ 
|Lot_id | Prod_id| 
+-------+--------+ 
| LOT-1 | Prd-1 | 
| LOT-1 | Prd-2 | 
| LOT-1 | Prd-3 | 
| LOT-2 | Prd-4 | 
+-------+--------+ 

Table Process 
+-------+--------+--------+------------+----------+ 
|proc_id|proc_cat|proc_seq|proc_prod_id|t_proc_qty| 
+-------+--------+--------+------------+----------+ 
| 1 | Proc-A | 1 | Prd-1 | 100 | 
| 2 | Proc-H | 2 | Prd-1 | 100 | 
| 3 | Proc-D | 3 | Prd-1 | 100 | 
| 4 | Proc-A | 1 | Prd-2 | 100 | 
| 5 | Proc-H | 2 | Prd-2 | 100 | 
| 6 | Proc-D | 3 | Prd-2 | 20 | 
| 7 | Proc-Q | 4 | Prd-2 | 20 | 
| 8 | Proc-A | 1 | Prd-3 | 100 | 
| 9 | Proc-H | 2 | Prd-3 | 100 | 
| 10 | Proc-D | 3 | Prd-3 | 50 | 
| 11 | Proc-O | 1 | Prd-4 | 80 | 
| 12 | Proc-F | 2 | Prd-4 | 80 | 
| 13 | Proc-H | 3 | Prd-4 | 80 | 
+-------+--------+--------+------------+----------+ 

И я хочу данные, как это, если я хочу выбрать только LOT = LOT-1. стол LOT присоединился к таблице процессов и данных накапливается сумма (t_proc_qty) от последнего proc_seq каждый proc_prod_id и группу по proc_cat и порядке proc_seq

+--------+--------+----------+ 
    |proc_cat|proc_seq|t_proc_qty| 
    +--------+--------+----------+ 
    | Proc-D | 3 | 150 |->accumulated from Prd-1 and prd-3 in last process is seq 3 
    | Proc-Q | 4 | 20 |->accumulated from Prd-2 in last process is seq 4 
    +--------+--------+----------+ 

Какие запросы я использую в MySQL?

Я stucked в запросе

SELECT proc_cat, proc_seq, SUM(t_proc_qty) 
FROM Process 
LEFT JOIN Lot ON proc_prod_id=Prod_id 
WHERE Lot_id='LOT-1' 
GROUP BY proc_prod_id 
ORDER BY proc_seq DESC LIMIT 1 

эта схема для пробного запроса SQLFiddle

+0

Пытались ли вы что-нибудь? Покажите нам, что вы делали до сих пор. –

+0

Я stucked в запросе ВЫБРАТЬ proc_cat, proc_seq, SUM (t_proc_qty) ИЗ процесса LEFT JOIN Лота ПО proc_prod_id = Prod_id GROUP BY proc_prod_id ORDER BY proc_seq DESC LIMIT 1 – NeoS

+0

Редактировать ваш вопрос соответственно – Strawberry

ответ

1

Из таблицы Process вы хотите записи с самым высоким proc_id за proc_prod_id:

select * 
from process 
where not exists 
(
    select * 
    from process later 
    where later.proc_prod_id = process.proc_prod_id 
    and later.proc_id > process.proc_id 
); 

Из этой информации Вы хотите заполнить за proc_cat и proc_sec. И вы также хотите рассмотреть только prod_id для 'LOT-1' в таблице LOT.

Полный запрос:

select proc_cat, proc_seq, sum(t_proc_qty) 
from process 
where proc_prod_id in (select prod_id from lot where lot_id = 'LOT-1') 
and not exists 
(
    select * 
    from process later 
    where later.proc_prod_id = process.proc_prod_id 
    and later.proc_id > process.proc_id 
) 
group by proc_cat, proc_seq 
order by proc_cat, proc_seq; 

SQL скрипка: http://sqlfiddle.com/#!9/1fa3fd/5

+0

Этот запрос работает как шарм, thx .. он может использовать условие соединения вместо подбора select? – NeoS

+0

в результате запроса выше показаны 2 строки данных, которые я хочу комбинировать со счетом. поэтому в результате запроса просто показать 1 строку со значением - количество данных: + ------- + | count | + ------- + – NeoS

+0

Да, вы можете присоединиться вместо предложения 'IN'. Многие это делают. Я предпочитаю предложение 'IN' (или предложение' EXISTS' иногда), потому что они дают понять, что вы делаете (т. Е. Смотрите записи в таблице 'process', которые имеют совпадение ** в **' lot', в другие слова записываются в таблицу 'process', для которой ** существует ** совпадение в' lot'). Такие критерии принадлежат, по моему мнению, условию «где», что становится еще более важным, когда могут быть повторяющиеся совпадения. –

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