最后一个数据mysql中的组条件

时间:2016-10-14 04:34:05

标签: mysql sql

我有这样的数据:

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加入表进程和数据是从最后一个proc_seq每个proc_prod_id累积的总和(t_proc_qty)和按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中使用了哪些查询?

我坚持查询

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

1 个答案:

答案 0 :(得分: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_catproc_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