2016-08-01 73 views
1

组如何从多个表的值应该是最小和组明智如何从多个表中获取价值,但价值应分钟和明智

像: 我有三个表

  Table1        Table3   
| ID | GPN | PKGID |   | GPN | Amt | 
| 1 | A | PKG01 |   | A | 10 | 
| 2 | B | PKG02 |   | A | 15 | 
| 3 | C | PKG03 |   | A | 20 | 
| 4 | D | PKG04 |   | A | 25 | 
             | A | 65 | 
             | A | 30 | 
-----------------------------   | B | 17 | 
             | D | 90 | 
             | B | 20 | 
     Table2       | B | 40 | 
| GPN | Date  |    | D | 60 | 
| A | 2016-09-10 |    | B | 80 | 
| A | 2016-09-18 |    | B | 100 | 
| B | 2016-09-10 |    | C | 3 | 
| B | 2016-09-11 |    | C | 6 | 
| B | 2016-09-12 |    | C | 9 | 
| C | 2016-10-12 |    | C | 12 | 
| C | 2016-10-13 |    | C | 15 | 
| C | 2016-10-14 |    | D | 7 | 
| D | 2016-09-10 |    | D | 10 | 
| D | 2016-10-13 |    | D | 13 | 

我必须从三个表中获取值,所以我该怎么做。

对于实施例

日期= 2016年9月10日

,我必须获取 的值代表如此结果所包含的所有组分的值。

至于结果

| ID | PKGID | GPN |  Amt | Date  | 
| 1 | PKG01 | A |  10 | 2016-09-10 | 
| 2 | PKG02 | B |  17 | 2016-09-10 | 
| 4 | PKG04 | D |  7 | 2016-09-10 | 
+0

从表2中选择您的日期,加入到你的其他表关闭GPN并在AMT列上使用MIN功能...您可以轻松地通过此操作轻松学习并学习很多 – scsimon

回答

1

你可以试试这个太

SELECT t1.*, MIN(t3.Amt) as Amt, t2.Date 
FROM table1 t1 
INNER JOIN table2 t2 on t1.GPN= t2.GPN 
INNER JOIN table3 t3 on t1.GPN= t3.GPN 
WHERE t2.Date = '2016-09-10' 
GROUP BY t1.GPN 
0

你可以尝试这样的事情。首先通过分组得到MIN(Amt),然后执行JOIN

select t1.*, 
xxx.Amt, 
t2.`Date` 
from table1 t1 join table2 t2 on t1.GPN = t2.GPN 
join (select GPN, min(Amt) as Amt from table3 group by GPN) xxx 
on t1.GPN = xxx.GPN; 
2

应该是这个

select table.id, table1.PKGID, table1.GPN, min(table3.Amt), table2.`date` 
from table1 
inner join table3 on table1.GPN= table3.GPN 
inner join table2 on table1.GPN= table2.GPN 
where date(table2.date) = str_to_date('2016-09-10', '%Y-%m-%d') 
group by table1.GPN, table.id, table1.PKGID, table2.`date` 
+0

谢谢@scaisEdge您已解决所有内部连接困惑非常感谢。 – User97798