(1). 題目要求輸出的時連續三行的記錄,則可以選擇三張單錶進行自關聯,連線的要求即為id序號的遞增。連線方式為left join
如下圖即為無要求時的連線語句及結果:
有圖可知,連線的每一行的 id 時從s1 到s2遞增1, 再到s3遞增1。
再因為連線的每一行即為代表連續的三行的記錄。根據題目要求,則要求people人數不小於100,即要求
這裡連線的每一行的三個people 記錄都得大於等於100。所以對上述連線結果進行一次where過濾
即加入。
(2) 過濾出連續得三行people不小於100得記錄。
select s1.*,s2.*, s3.*
from stadium as s1
left join stadium as s2
on s1.id+1 = s2.id
left join stadium as s3
on s1.id+2 = s3.id
where s1.people>=100
and s2.people>=100
and s3.people>=100
則輸出結果為如下圖:
此時輸出得結果即為連線得即為滿足條件的圖。對比原連線圖的輸出即為
因為是左連線,所以s1最多只能到id=6. 後續s1的id=7.id=8不能匹配後續的s2、s3。但是輸出結果需要s1的連續內容。即需要後續的id=7,id=8的內容。所以這裡選擇把上述求取的結果作為乙個表。再連線乙個原表。
(3)將上述求取結果作為乙個表。再連線乙個原表
注:這裡不需要上述結果的所有內容。只需要連線後的所有id號即可。
取的上述(2)求解所有的id為 【與上述**的區別只有在下**中 注紅的部分】
(selects1.id as r1,s2.id as r2, s3.id as r3
from stadium as s1
left join stadium as s2
on s1.id+1 = s2.id
left join stadium as s3
on s1.id+2 = s3.id
where s1.people>=100
and s2.people>=100
and s3.people>=100
)結果為
觀察,上述結果內所有出現的id都是會在連續表內出現。所以,取出所有id即可。與原表進行再連線。
連線條件即為原表的id和上述連線表的所有id相同。
**如下:
select s.* from stadium as s
inner join
(select s1.id as r1,s2.id as r2, s3.id as r3
from stadium as s1
left join stadium as s2
on s1.id+1 = s2.id
left join stadium as s3
on s1.id+2 = s3.id
where s1.people>=100
and s2.people>=100
and s3.people>=100
)pwhere (s.id = p.r1 or s.id = p.r2 or s.id = p.r3)
此時輸出結果為
有輸出結果圖可知,id是有重複,而且順序有些亂,此時需要對輸出id進行唯一化處理(distinct)、再根據id排序。
最終的**:
select distinct s.* from stadium as s
inner join
(select s1.id as r1,s2.id as r2, s3.id as r3
from stadium as s1
left join stadium as s2
on s1.id+1 = s2.id
left join stadium as s3
on s1.id+2 = s3.id
where s1.people>=100
and s2.people>=100
and s3.people>=100
) pwhere (s.id = p.r1 or s.id = p.r2 or s.id = p.r3)
order by s.id;
最終輸出結果為:
sql查詢當天記錄
1 sql在查詢當天記錄時要注意是從當天的0點0分0秒0毫秒開始,到次日0點0分0秒0毫秒截止,但不包含次日的0點0分0秒0毫秒。2 注意 在不同資料庫產品中,獲得當天日期的函式不一樣。mssql獲得當前日期 convert varchar 10 getdate 120 mysql獲得當前日期 da...
sql查詢最新記錄
查詢某一時間的最新記錄 分兩步 1 使用 max 查出滿足條件的最大id 2 通過 最大 id 查詢單條記錄 這樣查詢時間比較短 select from tablename where id select max id from tablename where user id useridvalue...
如何查詢出連續日期記錄
截圖如下 insus.net嘗試寫了程式並做了測試,可以得到預期的結果,sql 可參考和學習之用。建立乙個臨時表,將會儲存連續日期的記錄 create table temp idd varchar 10 sdate datetime declare sddatetime 開始日期 declare e...