Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定SQL中每个类别的最大值?_Sql_Sql Server 2008_Stored Procedures - Fatal编程技术网

如何确定SQL中每个类别的最大值?

如何确定SQL中每个类别的最大值?,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我的表格有如下记录: ID EmpID EffectiveDate PayElement Amount ComputeType AddDeduction 42 ISIPL001 2010-04-16 00:00:00.000 Basic 8000.00 On Attendance Addition 43 ISIPL001 2010-04-01 00:00:00.000 Con

我的表格有如下记录:

ID          EmpID           EffectiveDate     PayElement  Amount   ComputeType      AddDeduction
    42  ISIPL001    2010-04-16 00:00:00.000 Basic     8000.00   On Attendance   Addition
    43  ISIPL001    2010-04-01 00:00:00.000 Con       2000.00   On Attendance   Addition
    44  ISIPL001    2010-04-01 00:00:00.000 HRA       2000.00   On Attendance   Addition
    54  ISIPL001    2011-01-01 00:00:00.000 Basic    15000.00   On Attendance   Addition
    55  ISIPL001    2011-01-01 00:00:00.000 Con       6000.00   On Attendance   Addition
    57  ISIPL001    2011-01-01 00:00:00.000 HRA       6000.00   On Attendance   Addition
    61  ISIPL001    2010-07-10 00:00:00.000 Basic    12000.00   On Attendance   Addition
    66  ISIPL001    2010-07-10 00:00:00.000 HRA       4200.00   On Attendance   Addition
    68  ISIPL001    2010-07-10 00:00:00.000 Con       5600.00   On Attendance   Addition
我希望结果显示如下:

i、 e对于我数据库中可用的每个支付要素,我需要记录每个支付要素的最长日期

因此,我的输出应该如下所示:

54  Basic 15000
55  Con    6000
57  HRA    6000
试试这个:

SELECT  ID, 
        PayElement, 
        Amount
  FROM  (
        SELECT a.*,
             RANK() OVER(PARTITION BY PayElement ORDER BY EffectiveDate DESC) AS rn
        FROM <YOUR_TABLE> a 
        )   a
WHERE rn = 1                
试试这个:

SELECT  ID, 
        PayElement, 
        Amount
  FROM  (
        SELECT a.*,
             RANK() OVER(PARTITION BY PayElement ORDER BY EffectiveDate DESC) AS rn
        FROM <YOUR_TABLE> a 
        )   a
WHERE rn = 1                
试试这个

select
  T.ID,
  T.PayElement,
  T.Amount
from
  Test T inner join (select MAX(T_DATE.EffectiveDate) as MAX_DATE, T_DATE.PayElement from Test T_DATE group by T_DATE.PayElement) T_DATE on (T.PayElement = T_DATE.PayElement) and (T.EffectiveDate = T_DATE.MAX_DATE)
order by
  T.ID
试试这个

select
  T.ID,
  T.PayElement,
  T.Amount
from
  Test T inner join (select MAX(T_DATE.EffectiveDate) as MAX_DATE, T_DATE.PayElement from Test T_DATE group by T_DATE.PayElement) T_DATE on (T.PayElement = T_DATE.PayElement) and (T.EffectiveDate = T_DATE.MAX_DATE)
order by
  T.ID
试试像这样的东西

Select 
   a.ID, a.PayElement, a.Amount 
From MyTable a
Inner Join (
   Select PayElement, max(EffectiveDate) as MaxDate From MyTable Group By PayElement
) sub on a.EffectiveDate = sub.MaxDate and a.PayElement = sub.PayElement
试试像这样的东西

Select 
   a.ID, a.PayElement, a.Amount 
From MyTable a
Inner Join (
   Select PayElement, max(EffectiveDate) as MaxDate From MyTable Group By PayElement
) sub on a.EffectiveDate = sub.MaxDate and a.PayElement = sub.PayElement