SQL - 使用最新日期和最低值拉出唯一名称

时间:2015-02-12 20:14:09

标签: sql sql-server-2008

如何获得具有最新日期和最低值的唯一名称。

名称日期值

brad 1/2/10 1.1

brad 1/2/10 2.3

bob 1/6/10 1.0

brad 2/4/09 13.2

此查询似乎无法正常工作

  SELECT distinct 
  A.[ViralLoadMemberID]       
  ,B.LastName
  ,B.FirstName
  ,A.[Date]
  ,A.[vaule]  

  FROM [t].[dbo].[tblViralLoad] A
  left join [dbo].[tblEnrollees] B on A.ViralLoadMemberID = B.MemberID
  where 


   A.Date =
   (
   select MAX(Date)
   from dbo.tblViralLoad
   where ViralLoadMemberID = A.ViralLoadMemberID
   and 
   ( Date >= '07/01/2014'
    and Date <= '12/3/2014' ) )

2 个答案:

答案 0 :(得分:0)

这个想法是使用order by并只获取一行。如果您想要最新日期的最低值,标准SQL将是:

select t.*
from table t
order by desc desc, value asc
fetch first 1 row only;

对于旧版本的SQL Server,您将省略最后一行并执行select top 1 * . . .。对于MySQL,最后一行是limit 1

答案 1 :(得分:0)

有趣的排名()

declare @t as table (name varchar(50),dte date,val decimal(18,10));

insert into @t(name,dte,val) values
('Dave','1/1/2015',1.0),
('Dave','1/3/2015',1.2),
('Dave','1/4/2015',1.5),
('Dave','1/10/2015',1.3),
('Dave','1/15/2015',1.2),
('Steve','1/11/2015',1.6),
('Steve','1/12/2015',1.1),
('Steve','1/15/2015',1.2),
('Bill','1/21/2015',1.9),
('Ted','1/1/2015',1.8),
('Ted','1/10/2015',1.0),
('Ted','1/12/2015',1.7)

-- This will show the lowest prices by each person
select name,dte,val from (select name,dte,val, rank() over (partition by name order by val) as r from @t) as data where r = 1

-- This will be users lowest price and the last day they sublitted a prices regurdless if it is the lowest
select name,max(dte) as [last Date] ,min(val) as [Lowest Value] from @t group by name

-- Who had the lowest price last regurdless if they have raised there price later.
select top(1) name,dte [last lowest quote],val from (select name,dte,val, rank() over (order by val) as r from @t) as data where r = 1 order by dte desc

-- what is the lowest price cueently quoted reguarless who quoted it
select top(1) name,dte [best active quote],val from (select name,dte,val, rank() over (partition by name order by dte desc) as r from @t) as data where r = 1 order by val