全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2600
推到 Plurk!
推到 Facebook!

QUERY 查詢最末筆資料但非合格條件資料需要再往上查詢到真正合格條件資料

答題得分者是:carstyc
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-14 17:10:09 IP:114.41.xxx.xxx 訂閱
STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4); QUERY2.Close; QUERY2.SQL.CLEAR; QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE '); QUERY2.SQL.ADD('開獎日期<=''' STDT ''' '); // QUERY2.SQL.ADD(' ORDER BY 開獎日期 DESC'); //會減一天的日期出現 抓上一筆 QUERY2.SQL.ADD('ORDER BY 開獎日期 ASC'); QUERY2.OPEN; // QUERY2.First; //與 DESC 對應處理 QUERY2.Last; //與 ASC 對應處理 // QUERY2.NEXT; QUERY2.Prior; Lab_Day.Caption:=QUERY2.FIELDBYNAME('開獎日期').ASSTRING; Led_G1.Caption:=QUERY2.FIELDBYNAME('一').ASSTRING; Led_G2.Caption:=QUERY2.FIELDBYNAME('二號').ASSTRING; Led_G3.Caption:=QUERY2.FIELDBYNAME('三').ASSTRING; Led_G4.Caption:=QUERY2.FIELDBYNAME('四').ASSTRING; Led_G5.Caption:=QUERY2.FIELDBYNAME('五號').ASSTRING; Led_G6.Caption:=QUERY2.FIELDBYNAME('六號').ASSTRING; Led_G7.Caption:=QUERY2.FIELDBYNAME('七號').ASSTRING; 問題是QUERY2會抓最末筆資料,但末筆香港六合彩開獎資料確沒有 例如2009/10/13(星期二)前一筆是2009/10/12 (星期一)沒有開獎資料,要2009/10/10(星期六)才有開獎資料,所以說是要再往前推才能查詢到真正需要的資料,而且這種模式還不確定由最末筆往前推幾期,小弟沒有什麼題材好練習delphi 資料收尋,只好運用這些數據練習,但實在初學不得法,特請本專欄各先進大大們指導,謝謝!
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-14 17:16:15 IP:114.41.xxx.xxx 訂閱

[code delphi]
STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
QUERY2.Close;
QUERY2.SQL.CLEAR;
QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
// QUERY2.SQL.ADD(' ORDER BY 開獎日期 DESC'); //會減一天的日期出現 抓上一筆
QUERY2.SQL.ADD('ORDER BY 開獎日期 ASC');
QUERY2.OPEN;
// QUERY2.First; //與 DESC 對應處理
QUERY2.Last; //與 ASC 對應處理
// QUERY2.NEXT;
QUERY2.Prior;
Lab_Day.Caption:=QUERY2.FIELDBYNAME('開獎日期').ASSTRING;
Led_G1.Caption:=QUERY2.FIELDBYNAME('一號').ASSTRING;
Led_G2.Caption:=QUERY2.FIELDBYNAME('二號').ASSTRING;
Led_G3.Caption:=QUERY2.FIELDBYNAME('三號').ASSTRING;
Led_G4.Caption:=QUERY2.FIELDBYNAME('四號').ASSTRING;
Led_G5.Caption:=QUERY2.FIELDBYNAME('五號').ASSTRING;
Led_G6.Caption:=QUERY2.FIELDBYNAME('六號').ASSTRING;
Led_G7.Caption:=QUERY2.FIELDBYNAME('七號').ASSTRING;

[/code]

問題是QUERY2會抓最末筆資料,但末筆香港六合彩開獎資料確沒有 例如2009/10/13(星期二)前一筆是2009/10/12 (星期一)沒有開獎資料,要2009/10/10(星期六)才有開獎資料,所以說是要再往前推才能查詢到真正需要的資料,而且這種模式還不確定由最末筆往前推幾期,小弟沒有什麼題材好練習delphi 資料收尋,只好運用這些數據練習,但實在初學不得法,特請本專欄各先進大大們指導,謝謝!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-15 09:07:47 IP:114.32.xxx.xxx 未訂閱
您好,

請試一下
'SELECT *'
' FROM Hnk_49_NO'
' WHERE 開獎日期 = (select max(開獎日期) from Hnk_49_NO where 開獎日期 <=''' STDT ''') '

押中大獎記得分一下 ^_^
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-15 09:24:50 IP:203.79.xxx.xxx 訂閱

SELECT * FROM Hnk_49_NO WHERE 開獎日期<= %STDT and 一號 ='' ORDER BY 開獎日期 ASC

or

SELECT * FROM Hnk_49_NO WHERE 開獎日期<= %STDT and 一號 is null ORDER BY 開獎日期 ASC


這樣能不能解決啊....


===================引 用 K1086 文 章===================

[code delphi]
?STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
? QUERY2.Close;
? QUERY2.SQL.CLEAR;
? QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
? QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
// ? QUERY2.SQL.ADD('? ORDER BY 開獎日期 DESC'); //會減一天的日期出現 抓上一筆
? QUERY2.SQL.ADD('ORDER BY 開獎日期 ASC');
? QUERY2.OPEN;
// ? QUERY2.First;?? //與 DESC 對應處理
QUERY2.Last;? //與 ASC 對應處理
// ? QUERY2.NEXT;
? QUERY2.Prior;
? Lab_Day.Caption:=QUERY2.FIELDBYNAME('開獎日期').ASSTRING;
? Led_G1.Caption:=QUERY2.FIELDBYNAME('一號').ASSTRING;
? Led_G2.Caption:=QUERY2.FIELDBYNAME('二號').ASSTRING;
??Led_G3.Caption:=QUERY2.FIELDBYNAME('三號').ASSTRING;
? Led_G4.Caption:=QUERY2.FIELDBYNAME('四號').ASSTRING; ?
? Led_G5.Caption:=QUERY2.FIELDBYNAME('五號').ASSTRING; ??
? Led_G6.Caption:=QUERY2.FIELDBYNAME('六號').ASSTRING; ?
? Led_G7.Caption:=QUERY2.FIELDBYNAME('七號').ASSTRING;

[/code]

?問題是QUERY2會抓最末筆資料,但末筆香港六合彩開獎資料確沒有 例如2009/10/13(星期二)前一筆是2009/10/12 (星期一)沒有開獎資料,要2009/10/10(星期六)才有開獎資料,所以說是要再往前推才能查詢到真正需要的資料,而且這種模式還不確定由最末筆往前推幾期,小弟沒有什麼題材好練習delphi 資料收尋,只好運用這些數據練習,但實在初學不得法,特請本專欄各先進大大們指導,謝謝!
TWY
高階會員


發表:2
回覆:133
積分:152
註冊:2009-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-15 09:38:40 IP:211.21.xxx.xxx 訂閱
若知道 DB 總類,還可以有其他好用的 SQL 寫法。我看了很久問題描述,不太確定 k1086 是要問 SQL 問題說,我的悟性太低...
要是 k1086 遲遲沒有出現(回應),那就表示中獎繞跑了,換做是我就會

===================引 用 st33chen 文 章===================
押中大獎記得分一下 ^_^
編輯記錄
TWY 重新編輯於 2009-10-15 12:03:54, 註解 無‧
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-10-15 13:55:10 IP:114.41.xxx.xxx 訂閱

===================引 用 st33chen 文 章===================
您好,

請試一下
'SELECT *'
'?? FROM Hnk_49_NO'
' WHERE 開獎日期 = (select max(開獎日期) from Hnk_49_NO where 開獎日期 <=''' STDT ''') '

押中大獎記得分一下 ^_^

小弟引用你這模式
QUERY2.SQL.ADD('SELECT * ' ' FROM Hnk_49_NO' ' WHERE 開獎日期 = (select max(開獎日期) from Hnk_49_NO where 開獎日期 <=''' STDT ''')');
是會抓到與輸入當天開獎的號碼,但上一期的也跟當期的一樣,等於是說上期的抓不到,例如輸入2009/10/13 執行程式要抓出當期號碼 36 18 43 15 13 45 07及抓出上星期六的號碼期六2009/10/10號碼 19 16 12 49 02 20 04 才正確,現在依你的模式會抓到當期號碼上期號碼也相同,而不會秀出星期六的號碼,請問是小弟改錯了嗎?
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-10-15 14:15:29 IP:114.41.xxx.xxx 訂閱
回應 TWY 小弟還在學習階段,只是把香港六合彩開獎資料當學習模式,與中大獎與否無關,看書本研習一段時間總覺得小試一下,也順便滿足長輩心願啦,謝謝你的指教
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-10-15 14:22:55 IP:114.41.xxx.xxx 訂閱
回應 Carstyc 直接邦小弟修正完整的sql 語法,讓小弟學習,謝謝!
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-10-15 14:33:27 IP:203.79.xxx.xxx 訂閱
那只是簡單描述SQL語法而已....
重點是你的資料中,不管有沒有開獎都會有一筆資料,所以你應該是要挑開獎欄位有值的資料才是你要的開獎資料。
所以就是要 一號 二號 ......七號 的欄位中,有資料的,才是你要的資料

[code cpp]
STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
QUERY2.Close;
QUERY2.SQL.CLEAR;
QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
QUERY2.SQL.ADD('AND 一號 ='''' ');
QUERY2.SQL.ADD('ORDER BY 開獎日期 ');
QUERY2.OPEN;
QUERY2.Last;
Lab_Day.Caption:=QUERY2.FIELDBYNAME('開獎日期').ASSTRING;
Led_G1.Caption:=QUERY2.FIELDBYNAME('一號').ASSTRING;
Led_G2.Caption:=QUERY2.FIELDBYNAME('二號').ASSTRING;
Led_G3.Caption:=QUERY2.FIELDBYNAME('三號').ASSTRING;
Led_G4.Caption:=QUERY2.FIELDBYNAME('四號').ASSTRING;
Led_G5.Caption:=QUERY2.FIELDBYNAME('五號').ASSTRING;
Led_G6.Caption:=QUERY2.FIELDBYNAME('六號').ASSTRING;
Led_G7.Caption:=QUERY2.FIELDBYNAME('七號').ASSTRING;
[/code]

或者是

[code cpp]
STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
QUERY2.Close;
QUERY2.SQL.CLEAR;
QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
QUERY2.SQL.ADD('AND 一號 is null ');
QUERY2.SQL.ADD('ORDER BY 開獎日期 ');
QUERY2.OPEN;
QUERY2.Last;
Lab_Day.Caption:=QUERY2.FIELDBYNAME('開獎日期').ASSTRING;
Led_G1.Caption:=QUERY2.FIELDBYNAME('一號').ASSTRING;
Led_G2.Caption:=QUERY2.FIELDBYNAME('二號').ASSTRING;
Led_G3.Caption:=QUERY2.FIELDBYNAME('三號').ASSTRING;
Led_G4.Caption:=QUERY2.FIELDBYNAME('四號').ASSTRING;
Led_G5.Caption:=QUERY2.FIELDBYNAME('五號').ASSTRING;
Led_G6.Caption:=QUERY2.FIELDBYNAME('六號').ASSTRING;
Led_G7.Caption:=QUERY2.FIELDBYNAME('七號').ASSTRING;
[/code]
===================引 用 K1086 文 章===================
回應 Carstyc?直接邦小弟修正完整的sql 語法,讓小弟學習,謝謝!
編輯記錄
carstyc 重新編輯於 2009-10-15 14:35:34, 註解 無‧
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-10-15 17:00:30 IP:114.41.xxx.xxx 訂閱

[code delphi]
STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
QUERY2.Close;
QUERY2.SQL.CLEAR;
QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
// QUERY2.SQL.ADD('AND 一號 is null ');//會抓不到資料因為一號 is null判斷空值
QUERY2.SQL.ADD('AND 一號>"0" ');
QUERY2.SQL.ADD('ORDER BY 開獎日期 ');
QUERY2.OPEN;
QUERY2.Last;
QUERY2.Prior; //
Carstyc 你的指導 果然你利害完全瞭解小弟的用意》小弟把QUERY2.SQL.ADD('AND 一號>"0" '); 改成之後就可以分別抓到當期上期資料,可是為什麼當我輸入2009/10/15執行之後,秀出當期是 0 0 0 0 0 0 0正確,然而上期照理要抓到2009/10/13的號碼,可是秀出2009/10/10的號碼,跳過2009/10/13的號碼,小弟連續往回測試所抓的資料都正確,原先以為是資料殘存關係,重新開啟程式執行還是這點問題,請教難道是 Table 資料問題?還是程式有問題?
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-10-15 17:57:38 IP:203.79.xxx.xxx 訂閱
你寫的有點...看不懂....

你是指 2009/10/13 應該是有開獎的資料,但沒有顯示出來。

那你能把 2009/10/13 的資料貼出來看看嗎? 一號 二號.....七號 欄位分別是什麼....

而且你未交待 上一期 的按鈕,你做了什麼動作....

很難去評估是程式還是DB錯...

還是你能不能把 table 的資料弄成附件,讓其它大大可以看它實際的資料,方便給你建議...



===================引 用 K1086 文 章===================

[code delphi]
? STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
? QUERY2.Close;
? QUERY2.SQL.CLEAR;
? QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
? QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
// ? QUERY2.SQL.ADD('AND 一號 is null ');//會抓不到資料因為一號 is null判斷空值
? QUERY2.SQL.ADD('AND 一號>"0" ');
? QUERY2.SQL.ADD('ORDER BY 開獎日期 ');
? QUERY2.OPEN;
? QUERY2.Last;
? QUERY2.Prior; //
Carstyc 你的指導 果然你利害完全瞭解小弟的用意》小弟把QUERY2.SQL.ADD('AND 一號>"0" '); 改成之後就可以分別抓到當期上期資料,可是為什麼當我輸入2009/10/15執行之後,秀出當期是 0 0 0 0 0 0 0正確,然而上期照理要抓到2009/10/13的號碼,可是秀出2009/10/10的號碼,跳過2009/10/13的號碼,小弟連續往回測試所抓的資料都正確,原先以為是資料殘存關係,重新開啟程式執行還是這點問題,請教Carstyc
難道是 Table 資料問題?還是程式有問題?
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-10-16 16:49:47 IP:114.41.xxx.xxx 訂閱

===================引 用 carstyc 文 章===================
你寫的有點...看不懂....

你是指 2009/10/13 應該是有開獎的資料,但沒有顯示出來。

那你能把 2009/10/13 的資料貼出來看看嗎?? 一號 二號.....七號 欄位分別是什麼....

而且你未交待? 上一期 的按鈕,你做了什麼動作....

很難去評估是程式還是DB錯...

還是你能不能把 table 的資料弄成附件,讓其它大大可以看它實際的資料,方便給你建議...



===================引 用 K1086 文 章===================

[code delphi]
? STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
? QUERY2.Close;
? QUERY2.SQL.CLEAR;
? QUERY2.SQL.ADD('SELECT * FROM Hnk_49_NO WHERE ');
? QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');
// ? QUERY2.SQL.ADD('AND 一號 is null ');//會抓不到資料因為一號 is null判斷空值
? QUERY2.SQL.ADD('AND 一號>"0" ');
? QUERY2.SQL.ADD('ORDER BY 開獎日期 ');
? QUERY2.OPEN;
? QUERY2.Last;
? QUERY2.Prior; //
Carstyc 你的指導 果然你利害完全瞭解小弟的用意》小弟把QUERY2.SQL.ADD('AND 一號>"0" '); 改成之後就可以分別抓到當期上期資料,可是為什麼當我輸入2009/10/15執行之後,秀出當期是 0 0 0 0 0 0 0正確,然而上期照理要抓到2009/10/13的號碼,可是秀出2009/10/10的號碼,跳過2009/10/13的號碼,小弟連續往回測試所抓的資料都正確,原先以為是資料殘存關係,重新開啟程式執行還是這點問題,請教Carstyc 你能幫助小弟看程式sql的語法錯在那!謝謝!
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-10-16 17:03:36 IP:203.79.xxx.xxx 訂閱
看不見圖片哦..
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-10-16 18:01:04 IP:114.41.xxx.xxx 訂閱
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-10-16 18:40:12 IP:114.41.xxx.xxx 訂閱

===================引 用 carstyc 文 章===================
看不見圖片哦..
[

港號 Table
港號 Table
開獎日期期數星期一號二號三號四號五號六號七號
2009/10/5 0000000
2009/10/6104536121524491714
2009/10/7 0000000
2009/10/8104635392131334428
2009/10/9 0000000
2009/10/10104719161249022004
2009/10/11 0000000
2009/10/12 0000000
2009/10/13104836184315134507
2009/10/14 0000000
2009/10/15104915172237473926
2009/10/16 0000000
2009/10/1710500000000
2009/10/18 0000000


現在看見了嗎?
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-10-16 19:25:37 IP:219.84.xxx.xxx 訂閱
原因出在你多了一行
小弟加上才能秀出當期與上期有開獎的資料
因為你已經用 條件 <=''' STDT ''' ');

所以 10/17 那一筆資料本來就不會出現
所以當你 Prior 了。

所以你直接拿掉這一行就可以了。


===================引 用 K1086 文 章===================

===================引 用 carstyc 文 章===================
看不見圖片哦..
[

港號 Table
港號 Table
開獎日期期數星期一號二號三號四號五號六號七號
2009/10/5?0000000
2009/10/6104536121524491714
2009/10/7?0000000
2009/10/8104635392131334428
2009/10/9?0000000
2009/10/10104719161249022004
2009/10/11?0000000
2009/10/12?0000000
2009/10/13104836184315134507
2009/10/14?0000000
2009/10/15104915172237473926
2009/10/16?0000000
2009/10/1710500000000
2009/10/18?0000000


現在看見了嗎?
K1086
初階會員


發表:63
回覆:148
積分:42
註冊:2007-04-09

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-10-17 10:53:33 IP:114.41.xxx.xxx 訂閱

===================引 用 carstyc 文 章===================
原因出在你多了一行
小弟加上才能秀出當期與上期有開獎的資料? 因為你已經用? 條件? AND 一號>"0"??? 了 ,且你是用??小於等於

QUERY2.SQL.ADD('開獎日期<=''' STDT ''' ');??

所以 10/17 那一筆資料本來就不會出現
所以當你?? QUERY2.Last;?? 後,最後一筆就已經在 10/15 了,不需要再?? Prior 了。

所以你直接拿掉這一行就可以了。


===================引 用
文 章===================

===================引 用
文 章===================
看不見圖片哦..
[

港號 Table
期數一號三號五號七號
?0000
104536154914
?0000
104635213328
?0000
104719120204
?0000
?0000
104836431307
?0000
104915224726
?0000
10500000
?0000


現在看見了嗎?
===========>>>
謝謝 Carstyc 你的指導,小弟已經知道錯在那裡了( 這行還是需要加上,問題是2009/10/17 一號還是0 所以SQL判斷以最後一筆2009/10/15的值往前推當然會抓2009/10/13的號碼,小弟故意先把2009/10/17的一號值改成>0 (例如20)之後就OK了,
系統時間:2024-04-26 9:35:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!