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

一个复杂的sql语句,求指点
两个表,商品表Goods和价格表Prices. 一个商品对应多个价格,不同的时间有不同的价格。每天都添加一次价格,并更新Goods表的UpdateTime字段。
表结构如下:

CREATE TABLE Goods(
[Id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](80) NOT NULL,
[Image_url] [varchar](400) NULL,
[UpdateTime] [datetime] NOT NULL
)
GO
CREATE TABLE Prices(
[Id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Price] [money] NOT NULL,
[GId] [int] NOT NULL,--商品表的Id
[Time] [datetime] NOT NULL


求: 最近有降过价的商品.
用最后一次记录的价格减去上一次记录的价格,结果>0 的商品,按UpdateTime倒序。

大侠帮忙写一下实现语句,谢谢。


------解决方案--------------------
能不能给点数据
------解决方案--------------------
试试
SELECT [id],[name],[image_url],[UpdateTime],SUM([Price])
FROM (
SELECT g.*,p.[Price]
FROM Goods G INNER JOIN Prices P ON g.id=p.gid
WHERE EXISTS (SELECT 1 FROM (
SELECT g.NAME ,MAX( [UpdateTime]) [UpdateTime]
FROM Goods G 
GROUP BY g.NAME )b WHERE  g.NAME=b.NAME AND g.[UpdateTime]=b.[UpdateTime])
UNION ALL 
SELECT g.*,-1*p.[Price]
FROM Goods G INNER JOIN Prices P ON g.id=p.gid
WHERE EXISTS (SELECT 1 FROM (
SELECT g.NAME ,MAX( [UpdateTime])-1 [UpdateTimeY]--获取上一天的日期
FROM Goods G 
GROUP BY g.NAME  )b WHERE  g.NAME=b.NAME AND g.[UpdateTime]=b.[UpdateTimeY]))a
GROUP BY [id],[name],[image_url],[UpdateTime]
HAVING SUM([Price])<0

------解决方案--------------------
---最近有降过价的商品.
CREATE TABLE Goods(
[Id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](80) NOT NULL,
[Image_url] [varchar](400) NULL,
[UpdateTime] [datetime] NOT NULL
)
GO
CREATE TABLE Prices(
[Id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Price] [money] NOT NULL,
[GId] [int] NOT NULL,--商品表的Id
[Time] [datetime] NOT NULL

Go
Insert into Prices(Price,GId,Time) 
Select 10,1,'20100101' Union All
Select 20,1,'20100102' Union All
Select 15,1,'20100103' Union All
Select 10,2,'20100101' Union All
Select 20,2,'20100102' Union ALl
Select 10,3,'20100101'

Insert Into Goods(Name,UpdateTime)
Select 'a','20100103' Union All
Select 'b','20100102' Union All
Select 'c','20100101'

Go
--------- 查出最近减价的商品
With t as 
(Select *,ROW_NUMBER() Over(Partition by gid order&nbs