作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 巢状式 select
时间Fri Jun 6 13:45:09 2014
假设:
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://webptt.com/cn.aspx?n=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