Как определить максимальное значение для каждой категории в SQL? - PullRequest
1 голос
/ 05 апреля 2011

В моей таблице есть записи, подобные приведенным ниже:

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

Я хочу, чтобы результат отображался ниже:

т.е. для каждого элемента оплаты, доступного в моей базе данных, мне нужно записать, в котором указана максимальная дата для каждого элемента оплаты.

Так что мой вывод должен быть таким, как приведенный ниже:

54  Basic 15000
55  Con    6000
57  HRA    6000

Ответы [ 6 ]

2 голосов
/ 05 апреля 2011

Попробуйте это:

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                
1 голос
/ 05 апреля 2011

Попробуйте это.

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
1 голос
/ 05 апреля 2011
;with cte as
(
  select *,
    row_number() over(partition by PayElement order by EffectiveDate desc) as rn
  from YourTable
)    
select
  ID,
  PayElement,
  Amount
from cte
where rn = 1
0 голосов
/ 05 апреля 2011
select 
    Id, PayElement, Amount
from
    YourTable a
inner join
    (select 
        Id, PayElement, max(EffectiveDate) as EffectiveDate
    from 
        YourTable
    group by
        PayElement, Id) b
on 
    a.Id = b.Id
0 голосов
/ 05 апреля 2011

попробуйте что-то вроде

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
0 голосов
/ 05 апреля 2011
Select  a.Id, 
        a.PayElement,
        a.Amount

From dbo.YourTable a
Join 
(
Select  PayElement,
        Max(EffectiveDate) as[MaxDate]

From  dbo.YourTable
Group By PayElement
)b on a.PayElement = b.PayElement
        And a.EffectiveDate = b.MaxDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...