我正在尝试验证一些数据,我想找到列B的选择值的列B的最小值和最大值。它看起来像这样:
Select min(colB), max(colB)
From table
where colA = SomeValue
我想知道的是我如何指定一个特定的间隔,比如说10,它会每10分钟给我一个b的最小和最大值。它的功能如下:
for(int i = minValueOfColA; 1<maxValueOfColA;i+=10){
Select min(colB), max(colB)
From table
where colA = i
}
除了我想在sql中执行此操作。
答案 0 :(得分:2)
我希望这就是你要找的东西。由于增量为+10
,因此将忽略值为ColA
的{{1}}。
查询:
2
结果:
DECLARE @Table TABLE
(
colA INT,
colB INT
)
INSERT @Table VALUES(1, 2), (1, 39), (2, 2), (11, 21), (11, 42)
;WITH cteIncrement
AS
(
SELECT MIN(colA) minColA, MAX(colA) maxColA
FROM @Table
UNION ALL
SELECT minColA + 10, maxColA
FROM cteIncrement
WHERE minColA + 10 <= maxColA
)
SELECT MIN(t.colB) minColB, MAX(t.colB) maxColB
FROM cteIncrement cte
JOIN @Table t
ON t.colA = cte.minColA
GROUP by t.colA
答案 1 :(得分:1)
不是100%肯定我完全理解你,但是这样的事情怎么样:
select a/10, min(b), max(b)
from Table
group by (a / 10)
然后,您可以更改10
的出现次数以适应您选择的间隔。
对于范围的更漂亮的输出和间隔的输入,如下所示:
declare @interval int;
set @interval = 10;
select cast(a/@interval * @interval as varchar) + '-' + cast((a/@interval * @interval) + (@interval - 1) as varchar), min(b), max(b)
from Table
group by (a / @interval)
对于填充如下的表:
insert into Table values (1, 1), (1, 15), (11, 3), (12, 4), (17, 8), (20, 5)
给出interval = 10的以下结果:
0-9 1 15
10-19 3 8
20-29 5 5
这个区间= 15:
0-14 1 15
15-29 5 8
答案 2 :(得分:1)
你认为这可以解决你的问题(没有CTE)吗?:
CREATE TABLE T2 (COLA INT, COLB INT)
INSERT INTO T2 VALUES (2,3)
INSERT INTO T2 VALUES (2,5)
INSERT INTO T2 VALUES (3,10)
INSERT INTO T2 VALUES (4,20)
INSERT INTO T2 VALUES (5,30)
INSERT INTO T2 VALUES (12,35)
INSERT INTO T2 VALUES (12,52)
INSERT INTO T2 VALUES (13,40)
SELECT COLA, MIN(T2.COLB) AS MIN_COLB, MAX(T2.COLB) AS MAX_COLB,
FROM T2
CROSS JOIN (SELECT MIN(COLA) AS MIN_COLA FROM t2) B
GROUP BY COLA
HAVING (COLA-MIN(B.MIN_COLA))%10=0
输出:
COLA MIN_COLB MAX_COLB
----------- ----------- -----------
2 3 5
12 35 52
答案 3 :(得分:0)
对我来说似乎是一个简单的小组:
SELECT MIN(ColB), MAX(ColB), ColA
FROM Table
WHERE ColA IN(<Values list>)
GROUP BY ColA
现在,您所要做的就是根据您的间隔设置值列表。