SQL server-使用更换后的最新值
我有一张这样的桌子: 身份证件 创建存储为dateTime的\u日期 工业 示例条目:SQL server-使用更换后的最新值,sql,sql-server,date,Sql,Sql Server,Date,我有一张这样的桌子: 身份证件 创建存储为dateTime的\u日期 工业 示例条目: 1, '2012-12-01 00:00:00', 'retail' 1, '1969-12-31 19:00:00', 'leisure and tourism' 1, '2010-10-01 00:00:00', 'telesales' 2, '2010-2-01 00:00:00', 'finance' 2, '2010-2-01 00:00:00', 'retail' 2, '2009-0
1, '2012-12-01 00:00:00', 'retail'
1, '1969-12-31 19:00:00', 'leisure and tourism'
1, '2010-10-01 00:00:00', 'telesales'
2, '2010-2-01 00:00:00', 'finance'
2, '2010-2-01 00:00:00', 'retail'
2, '2009-08-01 00:00:00', 'finance'
现在创建日期是最近的,如果创建日期是“1969-12-31”,或者如果不存在,则创建日期是最近的日期。因此,我将任何日期“1969-12-31”更改为今天的日期
但是现在我只想看看最近的日期值
这似乎是一个更棘手的问题,因为您必须处理转换以及转换后的顺序,然后选择第一列。还有一些人你甚至不需要转换他们最近的约会,比如2
我希望数据如下所示:
1, '1969-12-31 19:00:00', ['leisure and tourism']
2, '2010-2-01 00:00:00', ['finance', 'retail']
我一直在看示例,但它不涉及数据转换。另一个问题是,当一个id有两个相同的最新创建日期时,如id=2所示,我们必须将结果串联在一起
我还尝试创建一个case语句来帮助转换:
CASE WHEN create_date = '1969-12-31 19:00:00'
THEN CONVERT(VARCHAR(19), GETDATE(),120)
ELSE create_date --Format: yyyy-mm-dd hh:mi:ss
END AS createDate
请注意,我使用的是SQL Server。创建日期是作为日期时间还是作为字符串存储的?@GordonLinoff tes作为日期时间-已将信息添加到上面。非常感谢!我唯一的问题是,如果日期是最早的,我可能需要连接所有行业same@redrubia对不起,我错过了那部分。这是一个新的尝试
declare @t table(id int, create_date datetime, industry varchar(50))
insert @t values(1,'20121201', 'retail')
insert @t values(1,'19691231', 'leisure and tourism')
insert @t values(1,'20101001', 'telesales')
insert @t values(2,'20100201', 'finance')
insert @t values(2,'20100201', 'retail')
insert @t values(2,'20090801', 'finance')
;with a as
(
select id, industry, case when create_date = convert(datetime, '31/12/1969', 104)
then current_timestamp else create_date end create_date, min(create_date) over (partition by id) chk,
row_number() over (partition by id order by case when create_date = convert(datetime, '31/12/1969', 104) then 1 else 2 end, create_date desc) rn
from @t
), b as
(
select * from a
where rn = 1 or chk <> convert(datetime, '31/12/1969', 104)
)
select b.id, max(create_date) create_date
,STUFF((
select distinct ',' + industry
from b b1
where b1.id = b.id
for xml path(''), type
).value('.', 'varchar(max)'), 1, 1, '') [industries]
from b
group by b.id
id create_date industries
1 2014-01-21 16:36:41.010 leisure and tourism
2 2010-02-01 00:00:00.000 finance,retail