就当你用的是SQL Server吧
SELECT
MIN (id) 开始ID,
MAX (ID) 结束ID,
MAX (数据) 最大值,
MIN (数据) 最小值,
AVG (数据) 平均值,
MIN (时间) 开始时间,
MAX (时间) 结束时间
FROM
(
SELECT
row_number () OVER (ORDER BY id) rowid ,*
FROM
t
WHERE
状态 >= 1000
) tn
GROUP BY
rowid - id
ORDER BY
MIN (id)
我晕。这个题你给五分 就打发。
是不是求 指定时间 至今天的 的天数?
假设表T,字段S_TIME是你需要的列:
(1) 若S_TIME为date类型,计算相差天数的SQL语句:SELECT TRUNC(SYSDATE)-TRUNC(S_TIME) FROM T WHERE 你需要的条件;
(2)若S_TIME为VARCHAR2类型,计算相差天数的SQL语句:SELECT TRUNC(SYSDATE)-TO_DATE(S_TIME,‘YYYY-MM-DD’) FROM T WHERE 你需要的条件;
select * from tb where a = xxx筛选后,难点就是如何判断是否有3天是连续的
可以将表下移一行后作差比较:
b 错行 差
1 2011-6-1
2 2011-6-3 2011-6-1 2
3 2011-6-4 2011-6-3 1
4 2011-6-5 2011-6-4 1
2011-6-5
然后再用游标判断差这一列是否有两个1是挨着的
或者直接判断时期是否连续,sqlserver里可以这样写
DECLARE @id INT
DECLARE @time DATETIME
DECLARE @tb TABLE (id INT IDENTITY(1,1) ,b DATETIME)
INSERT INTO @tb(b) SELECT b FROM tb ORDER BY b
SELECT @id=MIN(INT_I) FROM @tb
WHILE NOT @id IS NULL BEGIN
SELECT @time = b FROM @tb WHERE INT_I=@id
IF EXISTS(SELECT 1 FROM tb WHERE b = DATEADD(dd,1,@time))
BEGIN
IF EXISTS(SELECT 1 FROM tb WHERE b = DATEADD(dd,2,@time))
BEGIN
PRINT ‘存在!’
END
END
SELECT @id=MIN(id) FROM @tb WHERE id>@id
END