Tim*_*dik 4 sql database sql-server-2008
抱歉标题令人困惑。请告诉,是否可以通过数据库请求来完成。假设我们有下表
ind_id name value date
----------- -------------------- ----------- ----------
1 a 10 2010-01-01
1 a 20 2010-01-02
1 a 30 2010-01-03
2 b 10 2010-01-01
2 b 20 2010-01-02
2 b 30 2010-01-03
2 b 40 2010-01-04
3 c 10 2010-01-01
3 c 20 2010-01-02
3 c 30 2010-01-03
3 c 40 2010-01-04
3 c 50 2010-01-05
4 d 10 2010-01-05
Run Code Online (Sandbox Code Playgroud)
我需要查询所有行以包含ind_id
给定日期的每个行,如果给定日期没有ind_id
,则取最近的较低日期,如果没有任何较低日期,则返回 ind_id + name (名称/ind_id 对相等)与空值。例如,日期是 2010-01-04,我期望以下结果:
ind_id name value date
----------- -------------------- ----------- ----------
1 a 30 2010-01-03
2 b 40 2010-01-04
3 c 40 2010-01-04
4 d NULL NULL
Run Code Online (Sandbox Code Playgroud)
如果可能的话,如果有人帮助我构建查询,我将非常感激。我正在使用 SQL Server 2008。
检查这个SQL FIDDLE 演示
with CTE_test
as
(
select int_id,
max(date) MaxDate
from test
where date<='2010-01-04 00:00:00:000'
group by int_id
)
select A.int_id, A.[Value], A.[Date]
from test A
inner join CTE_test B
on a.int_id=b.int_id
and a.date = b.Maxdate
union all
select int_id, null, null
from test
where int_id not in (select int_id from CTE_test)
Run Code Online (Sandbox Code Playgroud)