读书人

一个SQL语句,解决即可结帖解决办法

发布时间: 2012-01-13 22:43:29 作者: rapoo

一个SQL语句,解决即可结帖
表字段 值(decimal) 时间(dateTime)
要求是 求出一个列 显示出与最近的上一个时间数据相比,值的状态.如涨 平 落
比如数据 19.20 2007-03-01 13:00:00
19.40 2007-03-01 14:00:00

求出是 平


[解决办法]
不太明白,说清楚一点撒

[解决办法]
你所谓的最近是怎么算的
[解决办法]
select case when 值 > (select top 1 值 from 表 b where b. <a. order by desc) then ' ' when 值 =(select top 1 值 from 表 b where b. <a. order by desc) then '平 ' else '落 ' from 表a
[解决办法]
--建境
Create Table 表
(值 decimal(10, 2),
时间 dateTime)
Insert 表 Select 19.20, '2007-03-01 13:00:00 '
Union All Select 19.40, '2007-03-01 14:00:00 '
GO
--
Select
A.值,
A.时间,
(Case When A.值 - IsNull(Max(B.值), 0) > 0 Then N '涨 ' When A.值 - IsNull(Max(B.值), 0) = 0 Then N '平 ' Else N '落 ' End) As 状态
From
表 A
Left Join
表 B
On A.时间 > B.时间
Group By
A.值,
A.时间
GO
--除境
Drop Table 表
--果
/*
值时间状态
19.202007-03-01 13:00:00.000涨
19.402007-03-01 14:00:00.000涨
*/
[解决办法]
jydqwe(闲庭漫步) ( ) 信誉:100 2007-07-30 16:30:20 得分: 0


有点问题 就是并没有表b 一共只有一张表
是求出离记录时间最近的记录 并进行比较 如果不存在 就填写平.


-----------

你了?

我都出例子了。

你有表B,那的B是名。

有出入的是,如果不存在,那句填的是。
[解决办法]
晕哦,鱼
只有两行数据测试

Select
A.值,
A.时间,
Case When B.值 is null then N '平 ' when A.值 - B.值 > 0 Then N '涨 ' When A.值 =B.值 Then N '平 ' Else N '落 ' End As 状态
From
表 A
Left Join
表 B
On B.时间=(select max(时间) from 表 where 时间 <a.时间)
order By
A.时间

[解决办法]
declare @a table(id int,name decimal(6,2),lasttime datetime)
insert into @a select 1,19.20, '2007-03-01 13:00:00 ' union all
select 2,19.40, '2007-03-01 14:00:00 ' union all
select 3,19.50, '2007-03-01 15:00:00 '


select a.*,
case when (a.name - b.name)> 0 then N '涨 '
when (a.name - isnull(b.name,a.name))=0 then N '平 '
else N '跌 'end
from @a a
left join @a b on a.id = b.id +1
--结果,多加了id列,可以加一个临时表加这个列
id name lasttime
----------- --------------------------------------- ----------------------- ----
1 19.20 2007-03-01 13:00:00.000 平
2 19.40 2007-03-01 14:00:00.000 涨
3 19.50 2007-03-01 15:00:00.000 涨
[解决办法]
修改下

--建境
Create Table 表
(值 decimal(10, 2),
时间 dateTime)
Insert 表 Select 19.20, '2007-03-01 13:00:00 '
Union All Select 19.40, '2007-03-01 14:00:00 '
GO
--
Select


A.值,
A.时间,
(Case When Max(B.值) Is Null Then N '平 ' Else
(Case When A.值 - Max(B.值) > 0 Then N '涨 ' When A.值 - Max(B.值) = 0 Then N '平 ' Else N '落 ' End)
End) As 状态
From
表 A
Left Join
表 B
On A.时间 > B.时间
Group By
A.值,
A.时间
GO
--除境
Drop Table 表
--果
/*
值时间状态
19.202007-03-01 13:00:00.000平
19.402007-03-01 14:00:00.000涨
*/
[解决办法]
用左的有影速度。
[解决办法]
该说的都被楼上的强人说了,路过学习一下~
[解决办法]
用子查也可以,但是效率也一般。

try

Select
值,
时间,
(Case When (Select TOP 1 值 From 表 Where 时间 < A.时间 And DateDiff(dd, , '2007-07-30 ') = 0 Order By 时间 Desc) Is Null Then N '平 ' Else
(Case When A.值 - (Select TOP 1 值 From 表 Where 时间 < A.时间 And DateDiff(dd, , '2007-07-30 ') = 0 Order By 时间 Desc) > 0 Then N '涨 '
When A.值 - (Select TOP 1 值 From 表 Where 时间 < A.时间 And DateDiff(dd, , '2007-07-30 ') = 0 Order By 时间 Desc) = 0 Then N '平 '
Else N '落 ' End)
End) As 状态
From
表 A
Where DateDiff(dd, , '2007-07-30 ') = 0
[解决办法]
declare @a table(id int,name decimal(6,2),lasttime datetime)
insert into @a select 1,19.20, '2007-03-01 13:00:00 ' union all
select 2,19.40, '2007-03-01 14:00:00 ' union all
select 3,19.50, '2007-03-01 15:00:00 '


select a.*,
case when (a.name - b.name)> 0 then N '涨 '
when (a.name - isnull(b.name,a.name))=0 then N '平 '
else N '跌 'end
from @a a
left join @a b on a.id = b.id +1

读书人网 >SQL Server

热点推荐