線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2459
推到 Plurk!
推到 Facebook!

如何取得最近日期異動資料?

缺席
pedro
尊榮會員


發表:152
回覆:1177
積分:875
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-01-05 15:20:10 IP:60.248.xxx.xxx 未訂閱
請教前輩

我的資料表如下
smidpppgeffdate
1332009/10/11
1332009/11/31
1342009/12/31**
1342009/10/09
2432009/11/30**
2432009/10/11
2432009/11/12

我要如何用mysql語法,取出標雙星號的資料?
我用
select i.smid,i.pp,i.pg,j.effdate
from table i join
(select smid,max(effdate) effdate from table group by smid) j
on i.smid=j.smid
會取出除了標雙星號外,還多了好幾筆

謝謝指教
編輯記錄
pedro 重新編輯於 2010-01-06 10:32:59, 註解 無‧
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-01-06 00:59:59 IP:114.33.xxx.xxx 未訂閱
[code cpp] 
SELECT * FROM i WHERE effdate >= ( SELECT DATE_SUB( CURDATE() , INTERVAL 6 DAY ) AS eff_start_date )
[/code]
這樣可以嗎?? 6 那數字自己變,看要找現在起幾天內有變動的.
------
yckuo
編輯記錄
yckuo 重新編輯於 2010-01-06 01:00:57, 註解 無‧
yckuo 重新編輯於 2010-01-06 01:01:51, 註解 無‧
yckuo 重新編輯於 2010-01-06 01:02:59, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1177
積分:875
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-01-06 10:43:42 IP:60.248.xxx.xxx 未訂閱
感謝yckuo百忙之中撥空回應

您的語法是可以達到我要的,

只是我可能表達錯誤了,我有重新更新假設的資料,應該要取出smid,pp那一群組裡最大日期的該筆資料
我用修改後,還是會找多出標星號一筆

[code sql]
select i.smid,i.pp,i.pg,j.effdate
from (select smid,pp,pg from table group by smid,pp,pg) i join
(select smid,max(effdate) effdate from table group by smid) j
on i.smid=j.smid
[/code]

1,3,3,2009/12/31*
1,3,4,2009/12/31
2,4,3,2009/11/30




===================引 用 yckuo 文 章===================
[code cpp]
SELECT * FROM i WHERE effdate >= ( SELECT DATE_SUB( CURDATE() , INTERVAL 6 DAY ) AS eff_start_date )
[/code]
這樣可以嗎?? 6 那數字自己變,看要找現在起幾天內有變動的.
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-01-06 11:15:52 IP:114.33.xxx.xxx 未訂閱

===================引 用 pedro 文 章===================
只是我可能表達錯誤了,我有重新更新假設的資料,應該要取出smid,pp那一群組裡最大日期的該筆資料
我用修改後,還是會找多出標星號一筆

[code sql]
select i.smid,i.pp,i.pg,j.effdate
from (select smid,pp,pg from table group by smid,pp,pg) i join
(select smid,max(effdate) effdate from table group by smid) j
on i.smid=j.smid
[/code]
===========================================================
照你的寫法只要在 i.smid=j.smid 後面再加 group by smid,pp 就可以了
或用這樣也可以

[code sql]
SELECT smid, pp, pg, max( effdate ) effdate FROM `i` WHERE 1 GROUP BY smid, pp
[/code]
------
yckuo
pedro
尊榮會員


發表:152
回覆:1177
積分:875
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-01-06 13:21:20 IP:60.248.xxx.xxx 未訂閱
謝謝

我真豬頭,依後面的條件就解出來了

select i.smid,i.pp,i.pg,j.effdate
from tsttable i right join
(select smid,pp,max(effdate) effdate from tsttable group by smid,pp) j
on i.smid=j.smid and i.pp=j.pp and i.effdate=j.effdate


===================引 用 pedro 文 章===================
照你的寫法只要在 i.smid=j.smid 後面再加 group by smid,pp 就可以了
或用這樣也可以

[code sql]
SELECT smid, pp, pg, max( effdate ) effdate FROM `i` WHERE 1 GROUP BY smid, pp
[/code]
系統時間:2018-01-18 23:26:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!