一个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