我的需求是:求每个产品的最近报价时间 最低报价 注意:千万不要简单地把报价时间 和最低单价用ORDER BY语句进行排序 这样有很严重的BUG。根本求不出最近时间 最低单价 我要求出最近时间 那个时值的最低单价 这才是我的重点 请各位高手帮帮忙忙
表如下 表名:UP_DEF (说明:采购政策)
============================================================================
产品编号 供应商 单价 报价时间
鼠标 A1 6 2013-12-30
鼠标 A2 10 2014-01-08
鼠标 A2 12 2014-01-08
鼠标 A3 2 2013-12-01
键盘 B2 4 2013-10-01
键盘 B2 6 2014-01-08
键盘 B3 5 2014-01-08
键盘 B5 3 2012-01-05
显示器 A1 10 2014-01-01
显示器 A2 8 2014-01-01
============================================================================
我要出来的结果是这样的(实际UP_DEF表中的数据有上万条)
============================================================================
产品编号 供应商 单价 报价时间
鼠标 A2 10 2014-01-08
键盘 B3 5 2014-01-08
显示器 A2 8 2014-01-01
------解决方案--------------------
刚才的错了,修改一下
----------------------------------------------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2014-01-08 09:14:39
-- Version:
-- Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
-- Dec 28 2012 20:23:12
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[UP_DEF]
if object_id('[UP_DEF]') is not null drop table [UP_DEF]
go
create table [UP_DEF]([产品编号] varchar(6),[供应商] varchar(2),[单价] int,[报价时间] datetime)
insert [UP_DEF]
select '鼠标','A1',6,'2013-12-30' union all
select '鼠标','A2',10,'2014-01-08' union all
select '鼠标','A2',12,'2014-01-08' union all
select '鼠标','A3',2,'2013-12-01' union all
select '键盘','B2',4,'2013-10-01' union all
select '键盘','B2',6,'2014-01-08' union all
select '键盘','B3',5,'2014-01-08' union all
select '键盘','B5',3,'2012-01-05' union all
select '显示器','A1',10,'2014-01-01' union all
select '显示器','A2',8,'2014-01-01'
--------------开始查询--------------------------
SELECT *
FROM [UP_DEF] a
WHERE EXISTS (SELECT 1 FROM (
SELECT 产品编号,MIN(单价)单价,报价时间
FROM [UP_DEF] a
WHERE EXISTS (SELECT 1 FROM (SELECT [产品编号],max([报价时间])[报价时间] FROM [UP_DEF] group BY [产品编号] ) b
WHERE a.[产品编号]=b.[产品编号] AND a.[报价时间]=b.[报价时间] )
GROUP BY 产品编号,报价时间) c where a.产品编号=c.产品编号 AND a.单价=c.单价 AND a.报价时间=c.报价时间)
----------------结果----------------------------
/*
产品编号 供应商 单价 报价时间
------ ---- ----------- -----------------------
鼠标 A2 10 2014-01-08 00:00:00.000
键盘 B3 5 2014-01-08 00:00:00.000
显示器 A2 8 2014-01-01 00:00:00.000
*/