我有一个db表:pf_pqs:
+----------+------+--------+-------+---------+
| onr | prSh | liteNr | seqNr | planQty |
+----------+------+--------+-------+---------+
| 10347006 | HEG | 1 | 0 | 5 |
| 10347006 | TEH | 1 | 1 | 5 |
| 10347006 | KAR | 1 | 2 | 5 |
| 10347006 | LEN | 1 | 3 | 5 |
| 10347006 | HEG | 2 | 0 | 5 |
| 10347006 | LEN | 2 | 1 | 5 |
| 10347006 | HEG | 3 | 0 | 5 |
| 10347006 | TEH | 3 | 1 | 5 |
| 10347006 | KAR | 3 | 2 | 5 |
| 10347006 | LEN | 3 | 3 | 5 |
结果必须包含每个seqNr
中最大的liteNr
以及所有其他相应字段;像这样:
+----------+------+--------+-------+---------+
| onr | prSh | liteNr | seqNr | planQty |
+----------+------+--------+-------+---------+
| 10347006 | LEN | 1 | 3 | 5 |
| 10347006 | LEN | 2 | 1 | 5 |
| 10347006 | LEN | 3 | 3 | 5 |
我尝试使用连接和分组进行不同的查询但到目前为止没有运气:(。 提前谢谢。
答案 0 :(得分:0)
假设liteNr和seqNr不重复自己,这样的事情应该有效:
SELECT
p1.onr,
p1.prSh,
p1.liteNr,
p1.seqNr,
p1.planQty
FROM
pf_pqs p1
INNER JOIN (
SELECT
liteNr,
MAX(seqNr) AS seqNr
FROM
pf_pqs
GROUP BY
liteNr
) p2 ON
p2.liteNr = p1.liteNr
AND p2.seqNr = p1.seqNr
答案 1 :(得分:0)
正确查询
SELECT
p1.onr,
p1.prSh,
p1.liteNr,
p1.seqNr,
p1.planQty
FROM
pf_pqs p1
INNER JOIN (
SELECT
onr,
liteNr,
MAX(seqNr) AS seqNr
FROM
pf_pqs
GROUP BY
liteNr
) p2 ON
p2.liteNr = p1.liteNr
AND p2.seqNr = p1.seqNr
AND p2.onr=p1.onr
答案 2 :(得分:-1)
您需要选择每个liteNr的最大seqNr,您可以通过SELECT liteNr, MAX(seqNr) ... GROUP BY liteNr
选择。然后使用ON a.liteNr = b.liteNr AND a.seqNr = b.seqNr
将其与表格连接起来。像这样的查询需要两个步骤。使用第一个查询,您可以查询每个liteNr的最大seqNrs,但这只会为您提供两列(liteNr, seqNrMax)
,您现在必须在原始表中再次查找,您可以使用连接或嵌套选择。
但是,如果您有两行最大seqNr,那么您的最终结果可能包含您需要注意的重复项。
mysql> SELECT `NAME`, `PRICE`,
`VENDOR`
FROM `PRODUCTS` `P1`
WHERE `P1`.`PRICE` = (
SELECT MIN(`PRICE`)
FROM `PRODUCTS` `P2`
WHERE `P2`.`NAME` = `P1`.`NAME`);
mysql> SELECT `P1`.`NAME`, `N` AS `PRICE`,
`P1`.VENDOR
FROM `PRODUCTS` `P1`
JOIN (
SELECT `NAME`, MIN(`PRICE`) AS `N`
FROM `PRODUCTS` `P2`
GROUP BY `NAME`) `P2`
ON `P1`.`NAME` = `P2`.`NAME`
WHERE `P1`.`PRICE` = `N`;
这两种最常见的方法是进行这类查询,但至少有三种其他方法可以做到这一点。