其實遇到的問題,跟這篇差不多
http://www.javaworld.com.tw/jute/post/view?bid=21&id=259674&sty=1
MSSQL如果有張Table
序號Seq----股票-----帳戶------交易日---------結算金額
(自1 A股票 A帳戶 2011/02/13 100
動2 A股票 A帳戶 2011/02/14 200
編3 A股票 B帳戶 2011/02/13 100←User只想顯示這筆
號4 A股票 A帳戶 2011/02/14 300←User只想顯示這筆
想要依帳戶Group By 又要Top(1)交易日,只出現最新一筆??
朋友先交我
select * from XXX where 帳戶,交易日 in (select (帳戶,max(交易日)) group by 帳戶 )
但是試了發現無法解決同一天多筆交易,朋友提供另一個解決方法
select * from xxx a where exists ( select top 1 from xxx b where a.seq=b.seq group by 股票 帳戶 order by 交易日 desc)
查了一下,exists 是後面()有成立才執行前面式子,但是後面如何a.seq=b.seq 還是沒想通。
最後解決的方法是
select * from ←這邊的*先打*讓他全出現,之後再留要的比較快
(select max(ID) as ID, Name,Max(Time), Message from mytable group by Name) AS A
left join mytable B ↑_這邊子查詢會SELECT出要的幾筆,+了Max(ID)可避免掉同天多筆交易
↑這邊要注意Left Join ,意思是A要的那幾筆跟所有查詢的資料。
on A.Name=B.Name and A.ID=B.ID;
但是我的B其實沒那麼單純,是JOIN了4張表出來的,並且有WHERE條件。
WHERE條件依然是放在最後一段,A.ID=B.ID的後面。
B應該是放(XXX JOIN YYY ON XXX.seq=YYY.seq.....接4段FROM之後的table名)
但是太亂太雜測試不出來,便用VS的查詢工具,執行完上面查詢已經出現A B 2個Tabel ,用設計工具加入剩的4個Tabel,VS會自動幫你JOIN好,並且原本的Left Join 也變Right Join(因為AB放的位置變顛倒)
Left Join 跟Right Join 其實是 2 x 3= 6 ,被乘數與乘數的關係
2011年2月15日 星期二
2009年3月30日 星期一
.NET 核心程式設計 第一章:使用集合管理物件
◎ HybridDictionary會自行根據資料量,選擇成為要變成Hashtable(>10)或ListDictionary(<10),這些都是採用key/value的方式儲存,而且皆為object。而這些的每一個子項叫做dictionaryentry
◎要實作IEnumerator的class,才可以使用foreach或xxx.ForEach
List a = new List();
a.ForEach( delegate(DateTime day ){/*要做的事情*/} )
◎ 堆疊(後進先出) Stack:Push()是放進去,Pub()是拿出來
佇列(先進先出) Queue:Enqueue()是放進去,Dequeue()是拿出來
(一次填入的方式為使用建構子)
◎要實作IEnumerator的class,才可以使用foreach或xxx.ForEach
List
a.ForEach( delegate(DateTime day ){/*要做的事情*/} )
◎ 堆疊(後進先出) Stack:Push()是放進去,Pub()是拿出來
佇列(先進先出) Queue:Enqueue()是放進去,Dequeue()是拿出來
| SortedDictionary | SortedList |
| 一個一個填入時會比較快 | 占用較少空間,維護兩組(Key/Value)陣列,一次填入很多時會比較快 |
(一次填入的方式為使用建構子)
2009年3月26日 星期四
ASP.NET 3.5 網站開發進階-9
第九章:效能調校與網站監控
1.網頁快取(OutputCache)
OutputCache的VaraByParam屬性當沒有要設定快取條件時,設定為"none",如果要透過QueryString的參數當條件,就設定為參數名稱,如果要依控制項的value當條件,就設定控制項的ID。
多個網頁都要用OutputCache時,可在WebConfig中設定CacheProfiles,並將name指定到page的CacheProfile屬性。
除了指示詞的設定外,OutputCache也可以用HttpCachePolicy類別(Response.Cache)寫Hard Code實作出來,這樣能更精確控制快取。
透過UserControl的加入,可以控制網頁區塊快取。
2.資料快取(Cache)
很類似Application物件,但Cache彈性更大可設定到期時間。
1.網頁快取(OutputCache)
OutputCache的VaraByParam屬性當沒有要設定快取條件時,設定為"none",如果要透過QueryString的參數當條件,就設定為參數名稱,如果要依控制項的value當條件,就設定控制項的ID。
多個網頁都要用OutputCache時,可在WebConfig中設定CacheProfiles,並將name指定到page的CacheProfile屬性。
除了指示詞的設定外,OutputCache也可以用HttpCachePolicy類別(Response.Cache)寫Hard Code實作出來,這樣能更精確控制快取。
透過UserControl的加入,可以控制網頁區塊快取。
2.資料快取(Cache)
很類似Application物件,但Cache彈性更大可設定到期時間。
ASP.NET 3.5 網站開發進階-8
第八章:自訂控制項進階設計
CustomControl沒有設計畫面,功能彈性比UserControl好,並且可以繼承既有的控制項,當開發好時,將專案編譯為dll組件,就可以佈署至網站中。
新增CustomControl時,範本選擇ASP.NET Server Control。
狀態維護:
要複寫SaveControlState, LoadControlStage事件,並在OnInit事件時透過Page.RegisterRequiresControlState在頁面中註冊事件程序。實作請參考練習8.3
Custom Composite Control:
自訂控項裡面也可以放既有的控項,首先類別要先繼承CompositeControl,並將子控制項的初始化寫在override CreateChildControls方法中,並給定初始值,將控制項加到this中。
支援樣板的Custom Control:
1.繼承CompositeControl
2.設計一個實作ITemplate介面的屬性並新增該屬性的TemplateContainer, PersistenceMode兩個Attribute
3.override CreateChildControls方法用ItemTemplate介面的InstantiateIn方法建立樣板。
4.自訂的Template樣板smartTag設計模式不支援。
CustomControl沒有設計畫面,功能彈性比UserControl好,並且可以繼承既有的控制項,當開發好時,將專案編譯為dll組件,就可以佈署至網站中。
新增CustomControl時,範本選擇ASP.NET Server Control。
狀態維護:
要複寫SaveControlState, LoadControlStage事件,並在OnInit事件時透過Page.RegisterRequiresControlState在頁面中註冊事件程序。實作請參考練習8.3
Custom Composite Control:
自訂控項裡面也可以放既有的控項,首先類別要先繼承CompositeControl,並將子控制項的初始化寫在override CreateChildControls方法中,並給定初始值,將控制項加到this中。
支援樣板的Custom Control:
1.繼承CompositeControl
2.設計一個實作ITemplate介面的屬性並新增該屬性的TemplateContainer, PersistenceMode兩個Attribute
3.override CreateChildControls方法用ItemTemplate介面的InstantiateIn方法建立樣板。
4.自訂的Template樣板smartTag設計模式不支援。
2009年3月25日 星期三
ASP.NET 3.5 網站開發進階-7
第七章:使用者控制項設計
UserControl的缺點是無法跨網站共用,如果想共用就要設計成CustomControl。
UserControl可以透過自行定義屬性與方法來增強他的彈性。
UserControl可以在設計頁面時直接嵌入在網頁中,也可以在執行時用動態載入。
動態載入的指令-Page.LoadControl(string Path)
通常我們會將UserControl放在一個PlaceHolder的容器中-PlaceHolder1.Controls.add(obj)
PlaceHolder很像Panel差別在於一個render出來沒有div tag一個有。
當動態載入UserControl時,保存狀態就很重要,最簡單的方式就是在PageLoad的時候都載入,
也可以用override LoadViewState方法來手動實作狀態的存取。參考練習7.4
補充觀念:當Browser送出一個Page在submit時postback的Request時,會將頁面上的viewstate一同submit,WebServer收到Request就會在LoadViewState事件將控項儲存在ViewState的值載入。
UserControl的缺點是無法跨網站共用,如果想共用就要設計成CustomControl。
UserControl可以透過自行定義屬性與方法來增強他的彈性。
UserControl可以在設計頁面時直接嵌入在網頁中,也可以在執行時用動態載入。
動態載入的指令-Page.LoadControl(string Path)
通常我們會將UserControl放在一個PlaceHolder的容器中-PlaceHolder1.Controls.add(obj)
PlaceHolder很像Panel差別在於一個render出來沒有div tag一個有。
當動態載入UserControl時,保存狀態就很重要,最簡單的方式就是在PageLoad的時候都載入,
也可以用override LoadViewState方法來手動實作狀態的存取。參考練習7.4
補充觀念:當Browser送出一個Page在submit時postback的Request時,會將頁面上的viewstate一同submit,WebServer收到Request就會在LoadViewState事件將控項儲存在ViewState的值載入。
ASP.NET 3.5 網站開發進階-6
第六章:網站會員機制規劃
這一章你要會...
1.用MemberShip API來管理使用者及角色資料,例如,建立使用者時,可以依CreateUser回傳的MembershipCreateStatus來判斷建立狀態是否成功。
2.執行aspnet_reqsql.exe將MemberShip的資料表建立在自訂的資料庫中。
3.MemberShip允許將不同資料表建立在不同資料庫中。
4.在WebConfig設定profile的新屬性,MemberShip會將你設定的屬性儲存在一個欄位中,提供profile的強型別。
最後...
請參考課本練習6.2:Ajax Membership API的整合應用,了解如何用javascript驗證登入。
ASP.NET 3.5 網站開發進階-5
第五章:AJAX進階設計
Microsoft Ajax Library是由JavaScript寫成,封裝在System.Web.Extension.dll中,預設.NET Framework安裝時會將它裝到GAC之中。它提供了JavaScript擴充功能,包含增強型別系統以及物件導向能力。透過此程式庫,document.getElementById("TextBox1").value可改寫為$get("TextBox1").value,這些稱為捷徑語法。
ASP.NET AJAX在瀏覽器執行會觸發生命週期事件,觸發順序請參考課本5-9。Application物件的load、unload事件處理常式不需要透過程式註冊,可以直接撰寫function pageLoad(){}。
熟悉PageRequestManager類別可以控管頁面的部分更新,例如與ScriptManager控項的RegisterDataItem方法,就可以在非同步的postback時,傳送額外的資料,以更新UpdatePanel之外的控項。也可以利用beginRequest、endRequest事件的搭配控制按鈕的狀態,避免使用者重複按按鈕。
如果要除錯AJAX,需要設定三個地方:WebConfig的debug、瀏覽器設定的ScriptDebugging、Display notification.
Sys.Debug.trace可將錯誤訊息輸出至output視窗,Sys.Debug.traceDump方法可以將物件資訊輸出在頁面中名為TraceConsole的textarea控項中。
為了方便管理js檔案,可以用專案部署內嵌在組件中,實作請參考課本練習5.4
在AJAX網頁中,可以再將ScriptManager的EnableGlobalization屬性設為True,啟用指令碼全球化,這時,將Page的Culture設為auto,就可以取得控制台或是瀏覽器設定的文化特性,顯示特定文化的時間、貨幣等相關資料。EnableLocalization屬性可啟用指令碼當地語系化,配合page的宣告UICulture=auto,可讀取各語系專用的resource資源。
當你的網站程式用到多個js檔,可以封裝成一個檔案,將程式碼組合在一起,降低瀏覽器與伺服器溝通的次數,用法是使用ScriptManager的CompositeScript,將ScriptReference寫在一起。
訂閱:
文章 (Atom)