鉴于以下情况:
CREATE TABLE IF NOT EXISTS `table1` (
`time` int(11) NOT NULL,
`aircraft` varchar(50) NOT NULL,
`height` int(11) NOT NULL
);
INSERT INTO `table1` (`time`, `aircraft`, `height`) VALUES
(1, 'klm', 605),
(2, 'klm', 603),
(3, 'klm', 705),
(6, 'klm', 505),
(1, 'klm2', 601),
(2, 'klm2', 605),
(3, 'klm2', 605),
(4, 'klm2', 705),
(5, 'klm2', 601),
(6, 'klm2', 301);
在高度最小、时间小于6的情况下,如何为每架飞机精确返回1行?当先前的条件返回一架飞机的多行时,应使用最小时间。
预期结果:
2, 'klm', 603
1, 'klm2', 601
它是一个非常大的apacheimpala数据库,因此性能是这个解决方案的一个考虑因素。
为测试创建了一个fiddle(注意fiddle不是impala):https://www.db-fiddle.com/f/cykj1grfdzxabhtpqzi7fp/2
2条答案
按热度按时间wbgh16ku1#
如果你想每架飞机只返回一行,那么
row_number()
我想到:你特别想要
row_number()
而不是rank()
,因为rank()
如果有关系,可以返回重复项。bakd9h0s2#
您选择的mysql版本不支持窗口功能,但mysql v8.0支持这些功能:
小提琴
(impala也支持它们,但语法可能略有不同)