回覆列表
  • 1 # 方言影視

    在SQL查詢中,查詢分組最大最小值可以使用Group By,但是需要同時獲得最大值/最小值發生時間的情況下,Group By並不適用,此時可使用本文介紹的方法。

    假設“測值表”結構和內容如圖所示,需要查詢每一個測點測值的最大值/最小值及發生時間。

    使用Group By可以查詢得到每個測點的最大值/最小值,但是需要同時查詢發生時間時,會出現錯誤:“選擇列表中的列 "測值表.時間" 無效,因為該列沒有包含在聚合函式或 GROUP BY 子句中。”

    針對這一需求,有兩種巢狀查詢方法,一種是在巢狀查詢中使用笛卡爾積,一種是在巢狀查詢中使用連線查詢。

    解決方法:

    求最大值,注意圖中紅線標出的語句

    select 測點編號,

    測值 as 最大值,

    時間

    from 測值表

    where ID not in

    (select a.ID from 測值表 a,測值表 b

    where a.測值

    select 測點編號,

    測值 as 最大值,

    時間

    from 測值表

    where ID not in

    (select a.ID from 測值表 a

    inner join 測值表 b on a.測點編號=b.測點編號

    where a.測值

    求最小值,注意圖中紅線標出的語句

    select 測點編號,

    測值 as 最小值,

    時間

    from 測值表

    where ID not in

    (select a.ID from 測值表 a,測值表 b

    where a.測值>b.測值 and a.測點編號=b.測點編號);

    select 測點編號,

    測值 as 最小值,

    時間

    from 測值表

    where ID not in

    (select a.ID from 測值表 a

    inner join 測值表 b on a.測點編號=b.測點編號

    where a.測值>b.測值);

  • 中秋節和大豐收的關聯?
  • 蘆薈的家常做法有哪些?