一張表t 里面下如下資料
用戶編號 收費年月 用戶名稱 本月行度 本月水量
1001 202009 黃中保 22 5
1001 202008 黃中保 19 5
1001 202007 黃中保 14 6
1001 202006 黃中保 10 7
1002 202009 伍小云 421 3
1002 202008 伍小云 321 3
1002 202007 伍小云 221 3
1003 202009 馬志強 151 23
1003 202008 馬志強 141 21
1003 202007 馬志強 121 23
通過SQL陳述句 在t中查詢出如下結果,
條件的意思就查詢出連續3個月“本用水量”相同的用戶,最新月份是9月,所以只顯示9月的資料就行。
用戶編號 收費年月 用戶名稱 本月行度 本月水量
1002 202009 伍小云 421 3
uj5u.com熱心網友回復:
CREATE TABLE #T
(
用戶編號 VARCHAR(10),
收費年月 VARCHAR(10),
用戶名稱 VARCHAR(10),
本月行度 INT,
本月水量 INT
)
INSERT INTO #T VALUES('1001', '202009', '黃中保', 22 , 5)
INSERT INTO #T VALUES('1001', '202008', '黃中保', 19 , 5)
INSERT INTO #T VALUES('1001', '202007', '黃中保', 14 , 6)
INSERT INTO #T VALUES('1001', '202006', '黃中保', 10 , 7)
INSERT INTO #T VALUES('1002', '202009', '伍小云', 421 , 3)
INSERT INTO #T VALUES('1002', '202008', '伍小云', 321 , 3)
INSERT INTO #T VALUES('1002', '202007', '伍小云', 221 , 3)
INSERT INTO #T VALUES('1003', '202009', '馬志強', 151 , 23)
INSERT INTO #T VALUES('1003', '202008', '馬志強', 141 , 21)
INSERT INTO #T VALUES('1003', '202007', '馬志強', 121 , 23)
;
WITH ct
AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY 用戶編號,收費年月) AS id FROM #T
)
SELECT b.用戶編號,b.收費年月,b.用戶名稱,b.本月行度,b.本月水量
FROM ct b INNER JOIN
(
SELECT MAX(id) AS id FROM
(
SELECT *, id - ROW_NUMBER() OVER(PARTITION BY 本月水量 ORDER BY 用戶編號) AS y FROM ct
) a
GROUP BY y HAVING COUNT(1)>=3
) c ON c.id = b.id
DROP TABLE #T
uj5u.com熱心網友回復:
SELECT c.*
FROM #T c
INNER JOIN
(
SELECT a.用戶編號,MAX(a.收費年月) AS 收費年月
FROM #t a WHERE (SELECT COUNT(1) FROM #T WHERE 用戶編號=a.用戶編號 AND 收費年月<=a.收費年月 AND 本月水量=a.本月水量 ) >= 3
GROUP BY a.用戶編號
) b ON b.用戶編號 = c.用戶編號 AND b.收費年月 = c.收費年月
uj5u.com熱心網友回復:
SELECT c.*
FROM #T c
INNER JOIN
(
SELECT a.用戶編號,MAX(a.收費年月) AS 收費年月
FROM
(
SELECT *,
LEAD(本月水量,1) OVER(PARTITION BY 用戶編號 ORDER BY 收費年月 desc) AS b ,
LEAD(本月水量,2) OVER(PARTITION BY 用戶編號 ORDER BY 收費年月 desc) AS c
FROM #T
) a
WHERE a.本月水量=a.b AND a.b=a.c
GROUP BY a.用戶編號
) b ON b.用戶編號 = c.用戶編號 AND b.收費年月 = c.收費年月
uj5u.com熱心網友回復:
create table 表t
(用戶編號 int,收費年月 varchar(10), 用戶名稱 varchar(10), 本月行度 int, 本月水量 int)
insert into 表t
select 1001,'202009','黃中保',22,5 union all
select 1001,'202008','黃中保',19,5 union all
select 1001,'202007','黃中保',14,6 union all
select 1001,'202006','黃中保',10,7 union all
select 1002,'202009','伍小云',421,3 union all
select 1002,'202008','伍小云',321,3 union all
select 1002,'202007','伍小云',221,3 union all
select 1003,'202009','馬志強',151,23 union all
select 1003,'202008','馬志強',141,21 union all
select 1003,'202007','馬志強',121,23;
with t as
(select *,rn=row_number() over(partition by 用戶編號 order by 收費年月 desc)
from 表t)
select 用戶編號,收費年月, 用戶名稱, 本月行度, 本月水量
from t
where rn=1
and 用戶編號 in(select 用戶編號
from t
where rn<=3
group by 用戶編號
having count(1)=3 and count(distinct 本月水量)=1)
/*
用戶編號 收費年月 用戶名稱 本月行度 本月水量
----------- ---------- ---------- ----------- -----------
1002 202009 伍小云 421 3
(1 行受影響)
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/144648.html
標籤:疑難問題
上一篇:mysql 關于分組排序后取值
下一篇:請問python中是什么演算法
