对于这个答案,我创建5种价格
create temp table p (id text, p1 float, p2 float, p3 float, p4 float, p5 float);
insert into p values ('Pizza', 1.4, 2, 1.3, 2.1, 1.6);
insert into p values ('Tea', 1.4, 3, 3, 2.1, 1.6);
首先UNPIVOT然后表的表作为一个数组,为期一周的名称和每周的价格。
select
id,
unnest(array['week1','week2','week3','week4','week5']),
unnest(array[p1,p2,p3,p4,p5])
from p
+-------+--------+--------+
| id | unnest | unnest |
+-------+--------+--------+
| Pizza | week1 | 1,4 |
+-------+--------+--------+
| Pizza | week2 | 2 |
+-------+--------+--------+
| Pizza | week3 | 1,3 |
+-------+--------+--------+
| Pizza | week4 | 2,1 |
+-------+--------+--------+
| Pizza | week5 | 1,6 |
+-------+--------+--------+
| Tea | week1 | 1,4 |
+-------+--------+--------+
| Tea | week2 | 3 |
+-------+--------+--------+
| Tea | week3 | 3 |
+-------+--------+--------+
| Tea | week4 | 2,1 |
+-------+--------+--------+
| Tea | week5 | 1,6 |
+-------+--------+--------+
然后过滤此表结果的最低价格。
where cte.price = (select least(p1,p2,p3,p4,p5) from p where p.id = cte.id);
您可以点击此处查看:http://rextester.com/VKXK37428
with cte (id, week, price) as
(
select
id,
unnest(array['week1','week2','week3','week4','week5']),
unnest(array[p1,p2,p3,p4,p5])
from p
)
select id, week, price
from cte
where cte.price = (select least(p1,p2,p3,p4,p5) from p where p.id = cte.id);
这是结果:
+-------+-------+-------+
| id | week | price |
+-------+-------+-------+
| Pizza | week3 | 1,3 |
+-------+-------+-------+
| Tea | week1 | 1,4 |
+-------+-------+-------+
喜。更新与另一行和分组? '插入p值('茶',1.9,2,1.3,0.3,1。6);'我有一种感觉,这个问题不是关于唯一的行 –
让我编辑答案 – McNets
你可以再次检查 – McNets