SQL server-使用更换后的最新值

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

我有一张这样的桌子:

身份证件 创建存储为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-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