日期:2014-05-17  浏览次数:20608 次

求助sqlserver语句!
表名:r
里面有字段    地域,时间,商品价格,   (商品名称是字段名称直接填写价格即可。)
  我现在要查出   每个地域最新时间某个商品的价格,商品为可选,时间和地域不可选。要怎么查?急~~~

------解决方案--------------------

select a.*
from tb a
where not exists(select 1 from tb b where a.地域=b.地域 and a.时间>b.时间)
或者:

select *
from (select *,rn=ROW_NUMBER() over(partition by 地域 order by 时间 desc) from tb)t
where rn=1

------解决方案--------------------
CREATE TABLE r(地域 NVARCHAR(100), 商品 NVARCHAR(100), 时间 DATETIME, 商品价格 INT)
INSERT r
SELECT '北京', '鼠标', GETDATE()-2, 10 UNION ALL
SELECT '北京', '鼠标', GETDATE()-1, 20 UNION ALL
SELECT '北京', '键盘', GETDATE()-2, 30
--查询所有地域,某个(或全部)商品,最新时间的价格
DECLARE @商品 NVARCHAR(255)
SET @商品 = '鼠标' --如果想查全部商品,就传个百分号: T @商品 = '%'

SELECT B.*, 这个是楼主想要的字段吗=(a.商品+'('+LTRIM(b.商品价格)+')') FROM
(SELECT DISTINCT 地域, 商品 FROM r WHERE 商品 LIKE @商品) a
CROSS APPLY
(SELECT TOP(1) * FROM r WHERE r.地域 = a.地域 AND r.商品 = a.商品 ORDER BY 时间 DESC) b

/*
地域 商品 时间 商品价格 这个是楼主想要的字段吗
北京 鼠标 2013-08-19 15:08:40.097 20 鼠标(20)
*/