请教SQL语句,查找某个产品单价最高那条数据。
表如下:
产品 单价 数量 最小包装 类型
铅笔 1.2 5 10 特价商品
铅笔 0.8 2 20 新品
铅笔 1.0 1 5 一般产品
铅笔 1.2 5 15 一般产品
要求找出,产品是“铅笔”,单价最高的那一条数据。例:案例铅笔单价最高的是1.2,单1.2又有两条数据,所以只需要默认取一条就好。
结果是第一条或最后一条都可以
希望结果如下
产品 单价 数量 最小包装 类型
铅笔 1.2 5 10 特价商品
[解决办法]
----------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-05-22 23:16:52
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
--Jun 17 2011 00:57:23
--Copyright (c) Microsoft Corporation
--Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([产品] varchar(4),[单价] numeric(2,1),[数量] int,[最小包装] int,[类型] varchar(8))
insert [huang]
select '铅笔',1.2,5,10,'特价商品' union all
select '铅笔',0.8,2,20,'新品' union all
select '铅笔',1.0,1,5,'一般产品' union all
select '铅笔',1.2,5,15,'一般产品'
--------------开始查询--------------------------
SELECT TOP 1 *
FROM [huang] a
WHERE EXISTS (SELECT 1 FROM (
SELECT [产品],MAX([单价])[单价]
from [huang]
WHERE [产品]='铅笔'
GROUP BY [产品])b WHERE a.[产品]=b.[产品] AND a.[单价]=b.[单价])
----------------结果----------------------------
/*
产品 单价 数量 最小包装 类型
---- --------------------------------------- ----------- ----------- --------
铅笔 1.2 5 10 特价商品
*/
SELECT top(1) * FROM Order o WHERE o.salePrice=
(SELECT MAX(o2.salePrice) AS salePrice FROM Order o2)
AND ItemId=[铅笔id]
create table acc
(产品 varchar(10), 单价 decimal(5,1), 数量 int, 最小包装 int, 类型 varchar(10))
insert into acc
select '铅笔', 1.2, 5, 10, '特价商品' union all
select '铅笔', 0.8, 2, 20, '新品' union all
select '铅笔', 1.0, 1, 5, '一般产品' union all
select '铅笔', 1.2, 5, 15, '一般产品' union all
select '铅笔盒', 2.2, 5, 8, '特价商品' union all
select '铅笔盒', 1.8, 2, 20, '新品' union all
select '铅笔盒', 2.0, 1, 5, '一般产品' union all
select '铅笔盒', 1.2, 5, 10, '一般产品'
select top 1 *
from acc
where 产品='铅笔'
order by 单价 desc
/*
产品 单价 数量 最小包装 类型
---------- --------------------------------------- ----------- ----------- ----------
铅笔 1.2 5 10 特价商品
(1 row(s) affected)
*/
create table acc
(产品 varchar(10), 单价 decimal(5,1), 数量 int, 最小包装 int, 类型 varchar(10))
insert into acc
select '铅笔', 1.2, 5, 10, '特价商品' union all
select '铅笔', 0.8, 2, 20, '新品' union all
select '铅笔', 1.0, 1, 5, '一般产品' union all
select '铅笔', 1.2, 5, 15, '一般产品' union all
select '铅笔盒', 2.2, 5, 8, '特价商品' union all
select '铅笔盒', 1.8, 2, 20, '新品' union all
select '铅笔盒', 2.0, 1, 5, '一般产品' union all
select '铅笔盒', 1.2, 5, 10, '一般产品'
select 产品,单价,数量,最小包装,类型
from
(select row_number() over(partition by 产品 order by 单价 desc) 'rn',
产品,单价,数量,最小包装,类型
from acc) t where t.rn=1
/*
产品 单价 数量 最小包装 类型
---------- --------------------------------------- ----------- ----------- ----------
铅笔 1.2 5 10 特价商品
铅笔盒 2.2 5 8 特价商品
(2 row(s) affected)
*/