Mysql
查詢最新版本的數據
mysql。
假設有一個包含欄位
startdate
和的表kind
。實際上在此處命名的真正問題列中
startdate
並且kind
在唯一索引中,但是如果只有startdate
(notkind
) 是唯一的情況也會很有趣。指定日期
d
。我想檢索給定的數據,該數據kind
對應於startdate
之前的最新數據d
。據我了解,這無法通過視圖有效地完成。
那麼,是否應該使用儲存過程來完成呢?我是儲存過程主題的新手。歡迎您的程式碼。
這很容易。
讓@d 為日期,@k 為種類:
select * from table a where startdate = (select max(b.startdate) from table b where b.startdate < @d and b.kind = @k) and a.kind = @k
我想提出以下建議:
SUGGESTION #1:查詢如下
SET @GivenKind = '...'; SET @GivenDate = d; SELECT * FROM table WHERE kind=@GivenKind AND startdate < @GivenDate ORDER BY startdate DESC LIMIT 1;
建議#2:定義一個好的索引
在你的問題中你說
實際上,在這裡命名的真正問題列中,startdate 和 kind 都在一個 UNIQUE 索引中,但是如果只有 startdate(不是 kind)是 UNIQUE 的情況也會很有趣。
對於我建議的查詢,您將需要一個索引來支持
WHERE
和ORDER BY
ALTER TABLE table ADD INDEX kind_startdate_ndx (kind,startdate);
這將極大地幫助查詢優化器。為什麼?
kind
是查詢中的常數startdate
是在一個範圍內kind
- 索引中列的順序很重要
如果此索引不存在,則可能導致範圍索引/表掃描或全索引/表掃描(如果
kind
的基數太低)。擁有一個索引
startdate,kind
將導致範圍索引掃描。如果您指定kind
.試一試 !!!