首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-13 
一个SQL语句,解决即可结帖表字段值(decimal)时间(dateTime)要求是求出一个列显示出与最近的上一个时间数据

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

热点排行