在SQL中,如何查詢某一欄位中最大值的數據?
請問各位:
本人做了一個小資料庫,其中一個表是每天都記錄的。這個表包括日期、頻道和收視率。但是由於數據是從excel中導入的,因此日期全是如42736、42737、42738這種整數。我想建立一個視圖,只顯示最近一天的數據。奈何知識不足,不知如何寫SQL代碼。
我嘗試在SELECT max(date)……,但是只返回一條數據,而我每天都有20條左右的數據。後來我想把max(date)放在where中,可是顯示禁止使用聚合函數。後來我又把max(date)放在having中,但還是只有一條數據。我該怎麼辦呢?
select max(date)然後join自己呀,只要你date上加了索引,瞬間出結果。
select top 1 with ties * from table order by date desc
取出第一個分組的所有數據集。
如果date加了索引,性能在所有方案里最好,執行計劃只需要一張表 Sort。
最簡單的子查詢:select * from table where date = (select max(date) from table)
或者用輪子哥講的join自己:
select * from table t1 left join (select max(date) as date from table) t2 on t1.date=t2.date where t2.date is not null
題主的意思應該是最大一天對應的所有數據。
用rank() over( order by date desc) as num
作為子查詢,再在外面的where num = 1既然是每天都有,最近一天不就是昨天的,昨天的日期算不出來嗎
select a.*
from
yourtable a
where
a.date =
(
select
max(b.date)
from
yourtable b
where
a.頻率欄位=b.頻率欄位
)
這不是超簡單嗎,首先有索引的情況下不要使用max函數效率太低最高效寫法是 select * from table where date = (select date from table order by date limit 1 desc)
1.我覺得最好還是從源頭解決問題比較好,從excel把數據導入到資料庫中,日期格式是可以保留的啊,像mysql和sqlserver我都導入過。2、另外因為你的日期是數字,沒有辦法判斷一天的日期的,是否考慮加一列時間戳,mysql中好像有一個類型是timestamp類型吧(電腦沒在身邊不知道寫的對不對)這個類型可以根據數據,自動記錄數據插入時間修改時間(具體用法可以上網仔細查查)。
這個很簡單的,帶個子查詢語句。
select * from 表名 where date=(select max(date) from 表名)
oracle中 SELECT MAX(欄位名) FROM 表名
先取最大值,然後在另一個select裡面where等於他。不過我個人還是建議你嘗試把Excel和SQL的數據對齊一下,應該是可以直接導入時間的
我覺得你還是先寫個程序把日期欄位的內容改為yyyy/MM/dd HH:mm:ss的形式之後再說。資料庫可以為字元串排序,然後你就可以寫類似的查詢語句
select * from table where time&>"2017/03/02 00:00:00" and time&<"2017/03/03 00:00:00" order by time
select top 1 * from table order by time desc
select * from table1 order by date desc limit0,1
按照日期降序排序取第一條紀錄就好了
如果知道日期欄位的數字是怎麼算出來的,可以用一些 builtin 函數來構造 where 條件
select a.* from table a,(select max(date) as _date from table) b where a.date=b._date
推薦閱讀:
※你遇到過哪些MySQL的坑?
※mysql索引最左匹配原則的理解?
※is NULL和= NULL,is not NULL和!= NULL有什麼區別?
※專精 Oracle 還是 MySQL?
※哪些互聯網公司的資料庫是選擇Oracle的,為什麼?