sql - SQL:从最大值更新最小值
问题描述
我正在努力通过 VB 和 OleDB 更新 myTable 中的列。
我的表:
myGroup Value1 Value2
A 20 5
B 15 3
A 19 4
A 20 6
C 10 2
B 14 4
C 11 7
我想用 value2 更新列 value3,其中当 value1 在组中最高时 value2 最低。
我有这个:
SELECT myGroup ,MAX(value1), MIN(value2)
FROM myTable
GROUP BY myGroup
我明白了:
myGroup Value1 Value2
A 20 4
B 15 3
C 11 2
但我需要这个:
myGroup Value1 Value2
A 20 5
B 15 3
C 11 7
我需要类似“UPDATE mytable SET Value3 = MIN(value2) WHERE MAX(value1) GROUP BY myGroup”
myTabel 应该是这样的:
myGroup Value1 Value2 Value3
A 20 5 5
B 15 3 3
A 19 4 5
A 20 6 5
C 10 2 7
B 14 4 3
C 11 7 7
请提供任何帮助。
解决方案
您可以使用如下查询:
SELECT t1.myGroup, t1.value1, t2.value2 as value3
FROM myTable t1
LEFT JOIN
(
SELECT myGroup, Value1, MIN(VALUE2) AS value2
FROM myTable
WHERE (myGroup, Value1) in
(
SELECT myGroup , MAX(value1)
FROM myTable
GROUP BY myGroup
)
GROUP BY myGroup, Value1) t2
ON ( t1.myGroup = t2.myGroup );
myGroup Value1 Value3
------- ------ ------
A 20 5
B 15 3
A 19 5
A 20 5
C 10 7
B 14 3
C 11 7
对于上面的 SELECT 语句,UPDATE 语句可能是:
UPDATE myTable t3
SET t3.Value2 =
( SELECT q.value3 FROM
(
SELECT t1.myGroup, t1.value1, t1.value2, t2.value2 as value3
FROM myTable t1
LEFT JOIN
(
SELECT myGroup, Value1, MIN(VALUE2) AS value2
FROM myTable
WHERE (myGroup, Value1) in
(
SELECT myGroup , MAX(value1)
FROM myTable
GROUP BY myGroup
)
GROUP BY myGroup, Value1) t2
ON ( t1.myGroup = t2.myGroup )
) q
WHERE q.myGroup = t3.myGroup
AND q.value1 = t3.value1
AND q.value2 = t3.value2
);
推荐阅读
- javascript - 如何在量角器中模拟请求
- html - Gmail 删除了多少 CSS 属性?
- merge - 如何根据 SAP Business Objects 中的两个不同合并维度派生列?
- performancecounter - 程序运行一段时间后如何计算返回指令(基于计算机硬件方面)
- mysql - 在 MySQL 中,如果有多对多表,我应该创建 auto-incr 列作为 PK 还是使用多列唯一作为 PK?为什么?
- spring-boot - 我们应该在 spring-boot 应用程序中有多个 @EnableJpaAuditing 注释吗?
- python-3.x - 自动从 csv 在多个文件夹中创建多个文本文件
- ios - 自定义segue完成后相机关闭?
- database - 数据库设计:缓存用户之间的相似兴趣或每次查询动态计算
- node.js - 节点mongo计数查询项