60分求SQL语句

yzf86211861 2010-12-16 12:02:05
字段
shipID, varchar(10)
sessionID, varchar(10)
EndDate_N, varchar(20)
EndDate_S, varchar(20)
EndDate_F, varchar(20)
EndDate_X, varchar(20)
以为项目开发需要 EndDate_N 下面这几个字段我转换为varchar存进去的.
测试数据
1 101 2010-05-06 2010-7-20 2010-7-22 2010-7-21
1 102 2010-05-06 2010-7-20 2010-7-22
2 102 2010-05-06 2010-7-20 2010-7-21
3 102 2010-10-06 2010-7-20

想查出来 1 101 2010-7-22
1 102 2010-7-22
1 102 2010-7-21
4 102 2010-10-06 其实就是取 最大的日期
新人求助
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fpzgm 2010-12-16
  • 打赏
  • 举报
回复
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table tb(shipID varchar(10),sessionID varchar(10),EndDate_N varchar(20),EndDate_S varchar(20),EndDate_F varchar(20),EndDate_X varchar(20))
insert into [tb]
select 1,101,'2010-05-06','2010-7-20','2010-7-22','2010-7-21' union all
select 1,102,'2010-05-06','2010-7-20','2010-7-22',null union all
select 2,102,'2010-05-06','2010-7-20','2010-7-21',null union all
select 3,102,'2010-10-06','2010-7-20',null,null

SELECT [shipID] ,[sessionID] ,max([EndDate_N]) as [EndDate_N] FROM
(
select [shipID] ,[sessionID] ,[EndDate_N] as [EndDate_N] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_S] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_F] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_X] from TB
)[tt]
group by [shipID] ,[sessionID]

/*
shipID sessionID EndDate_N
1 101 2010-7-22
1 102 2010-7-22
2 102 2010-7-21
3 102 2010-7-20
*/
viqn7qdnt 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxf163 的回复:]
SQL code
SELECT [shipID] ,[sessionID] ,max([EndDate_N] ) FROM
(
select [shipID] ,[sessionID] ,[EndDate_N] as [EndDate_N] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_S] from……
[/Quote]

up
王向飞 2010-12-16
  • 打赏
  • 举报
回复
SELECT [shipID]  ,[sessionID]  ,max([EndDate_N] )  FROM 
(
select [shipID] ,[sessionID] ,[EndDate_N] as [EndDate_N] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_S] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_F] from TB
union all
select [shipID] ,[sessionID] ,[EndDate_X] from TB
)[tt]
group by [shipID] ,[sessionID]
playwarcraft 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 playwarcraft 的回复:]
sql 2000
select shipID,sessionID,max(EndDate_N)
from
(
select shipID,sessionID,EndDate_N
union all
select shipID,sessionID,EndDate_S
union all
select shipID,sessionID,EndDate_F
union all
se……
[/Quote]

union all 那裡少了 from table..
playwarcraft 2010-12-16
  • 打赏
  • 举报
回复
--sql 2005


select shipID,sessionID,max_enddate=max([value])
from table
unpivot([value] for [abcd] in(EndDate_N,EndDate_S,EndDate_F,EndDate_X)) as U
group by shipID,sessionID
playwarcraft 2010-12-16
  • 打赏
  • 举报
回复
sql 2000
select shipID,sessionID,max(EndDate_N)
from
(
select shipID,sessionID,EndDate_N
union all
select shipID,sessionID,EndDate_S
union all
select shipID,sessionID,EndDate_F
union all
select shipID,sessionID,EndDate_X
) as t
group by shipID,sessionID
dawugui 2010-12-16
  • 打赏
  • 举报
回复
select shipID ,sessionID,
case when EndDate_N >= EndDate_S and EndDate_N >= EndDate_F and EndDate_N >= EndDate_X then EndDate_N
when EndDate_S >= EndDate_D and EndDate_S >= EndDate_F and EndDate_S >= EndDate_X then EndDate_S
when EndDate_F >= EndDate_N and EndDate_F >= EndDate_S and EndDate_F >= EndDate_X then EndDate_F
when EndDate_X >= EndDate_N and EndDate_X >= EndDate_S and EndDate_X >= EndDate_F then EndDate_X
end EndDate
from tb
唱唱反调 2010-12-16
  • 打赏
  • 举报
回复

--->测试脚本
create table Union_Test
(
shipID varchar(10),
sessionID varchar(10),
EndDate_N varchar(20),
EndDate_S varchar(20),
EndDate_F varchar(20),
EndDate_X varchar(20)
)
insert into Union_Test
select '1','101','2010-05-06','2010-7-20','2010-7-22','2010-7-21' union all
select '1','102','2010-05-06','2010-7-20','2010-7-22','' union all
select '2','102','2010-05-06','2010-7-20','2010-7-21','' union all
select '3','102','2010-10-06','2010-7-20','',''

--->执行语句
select shipID,sessionID,MAX(EndDate_N) as [MAX] from
(
select shipID,sessionID,EndDate_N from Union_Test
union all
select shipID,sessionID,EndDate_S from Union_Test
union all
select shipID,sessionID,EndDate_F from Union_Test
union all
select shipID,sessionID,EndDate_X from Union_Test
) as U
group by shipID,sessionID

--->清除数据
drop table Union_Test

--->结果
shipID sessionID MAX
---------- ---------- --------------------
1 101 2010-7-22
1 102 2010-7-22
2 102 2010-7-21
3 102 2010-7-20

(4 行受影响)

sysuleiw 2010-12-16
  • 打赏
  • 举报
回复
列转行,学习了。。
Hankuker 2010-12-16
  • 打赏
  • 举报
回复
study
oO寒枫Oo 2010-12-16
  • 打赏
  • 举报
回复

drop table tb
create table tb(shipID varchar(10),sessionID varchar(10),EndDate_N varchar(20),EndDate_S varchar(20),EndDate_F varchar(20),EndDate_X varchar(20))
insert into tb
select 1,101,'2010-05-06','2010-7-20','2010-7-22','2010-7-21' union all
select 1,102,'2010-05-06','2010-7-20','2010-7-22',null union all
select 2,102,'2010-05-06','2010-7-20','2010-7-21',null union all
select 3,102,'2010-10-06','2010-7-20',null,null

SELECT shipID ,sessionID ,max(EndDate_N) as EndDate_N
FROM
(
select shipID ,sessionID ,cast(EndDate_N as datetime) as EndDate_N from TB
union all
select shipID ,sessionID ,cast(EndDate_S as datetime) from TB
union all
select shipID ,sessionID ,cast(EndDate_F as datetime) from TB
union all
select shipID ,sessionID ,cast(EndDate_X as datetime) from TB
) as tt
group by shipID ,sessionID

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧