如何联接表以选择联接表中的最大行?

6jjcrrmo  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(344)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我有两个表,我想在一个属性上左键联接它们,但是我不想在第二个表中获取所有匹配的行,而是只选择某个列中编号最高(最新日期等)的条目。如何用sql表示这个结果?
下面是一个简单的例子来澄清我的问题。

Table `colors`
| color |
+-------+
| red   |
| green |
| blue  |

Table `inventory`
| color | value | shape    |
+-------+-------+----------|
| red   | 1     | square   |
| red   | 2     | circle   |
| green | 7     | triangle |

Desired output:
| color | value | shape    |
+-------+-------+----------|
| red   | 2     | circle   |
| green | 7     | triangle |
| blue  | NULL  | NULL     |

我的表相当大,所以理想的解决方案是合理有效的(没有必要进行微调,只是尽量避免可能变得巨大的双连接。)

zengzsys

zengzsys1#

http://sqlfiddle.com/#!9/0b75c/6号

SELECT c.*, i.value, i.shape
FROM colors c
LEFT JOIN inventory i
ON c.color = i.color
LEFT JOIN inventory i_
ON i.color = i_.color
  AND i.value<i_.value
WHERE  i_.color IS NULL

http://sqlfiddle.com/#!9/0b75c/8号

SELECT i.value, i.shape
FROM inventory i
LEFT JOIN inventory i_
ON i.color = i_.color
  AND i.value<i_.value
WHERE  i_.color IS NULL
a0zr77ik

a0zr77ik2#

select c.color, i2.value, i2.shape
from colors c
left join 
(
   select color, max(value) as value
   from inventory 
   group by color
) i on c.color = i.color
left join inventory i2 on i2.color = i.color
                      and i2.value = i.value

相关问题