在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的,為什麼?

TAG:資料庫 | SQL | MySQL | 計算機 | SQL優化 |