看板 Database 關於我們 聯絡資訊
假設: 1. 相同 ID 下 PAY_DATE 唯一 2. 「第一筆」的定義為: 2.1 相同 ID 下 2.2 小於該日期且最接近該日期 2.3 PAY_AMT != 0 3. PAY_DATE 格式為 'yyy/mm/dd' 固定 9 碼 4. PAY_AMT 最大為 10 位正整數 可嘗試以下 sql: select t3.ID,t3.PAY_DATE,t3.PAY_AMT, SUBSTRING( MAX(t3.AMT), CHARINDEX('-',MAX(t3.AMT)) + 1, 10 ) as AMT from ( select t1.ID,t1.PAY_DATE,t1.PAY_AMT, t2.PAY_DATE + '-' + cast(t2.PAY_AMT as char(10)) as AMT from price as t1 inner join price as t2 on t1.ID = t2.ID where t1.PAY_AMT = 0 and t2.PAY_DATE < t1.PAY_DATE and t2.PAY_AMT != 0 ) as t3 group t3.ID,t3.PAY_DATE,t3.PAY_AMT ※ 引述《superttl (ttl)》之銘言: : (針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行) : 資料庫名稱:MS SQL : 資料庫版本:SQL 2000 : 內容/問題描述: : 我有一個 TABLE (price) 裡面的欄位有 ID, PAY_DATE, PAY_AMT : 資料內容如下: : 1101 103/05/30 100 : 1101 103/05/29 99 : 1101 103/05/28 98 : 1101 103/05/27 0 : 1101 103/05/26 0 : 1101 103/05/23 99 : 1102 103/05/30 34 : 1102 103/05/29 0 : 1102 103/05/28 0 : 1102 103/05/27 66 : 1102 103/05/26 0 : 1102 103/05/23 44 : 我如何寫一巢狀式 select [先挑出 PAY_AMT 為 0 的資料,再選擇小於此日期其 PAY_AMT <> 0 的第一筆] : 得到的結果如下: : 1101 103/05/27 0 99 : 1101 103/05/26 0 99 : 1102 103/05/29 0 66 : 1102 103/05/28 0 66 : 1102 103/05/26 0 44 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.80.36 ※ 文章網址: http://www.ptt.cc/bbs/Database/M.1402033511.A.5D5.html ※ 編輯: cutekid (61.221.80.36), 06/06/2014 13:49:14 ※ 編輯: cutekid (61.221.80.36), 06/06/2014 13:57:00