簡體   English   中英

如何確定最大月份年份和月份

[英]how to determine Maximum Month Year and Month

我有一個存儲員工工資信息的表(SALARY,其中包含 NATIONAL_ID、SALYEAR、SALMONTH、SALAMOUNT、DATE_PAID 等字段)。

我需要從該表中提取數據,包括員工上個月的工資。

不幸的是,對於該表中的許多情況,DATE_PAID 列是 null,這迫使我考慮使用 SALYEAR、SALMONTH 的組合來確定最高值。

SALMONTH 存儲 1-12 的數字,SALYEAR 存儲年份信息,即 2010、2015 等。

使用ROW_NUMBER ,我們可以嘗試:

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY NATIONAL_ID
                                   ORDER BY SALYEAR DESC, SALMONTH DESC) rn
    FROM yourTable t
)

SELECT *
FROM cte
WHERE rn = 1;

上述方法將針對每個NATIONAL_ID的最新記錄,其中“最新”被定義為最近一年中的最近一個月。

select max(to_date(sal_year||to_char(sal_month,'FM00'),'yyyymm'))

應該這樣做。 如果您想要日期數據類型,TO_DATE 實際上只是為了完整性。

您需要像這樣使用COALESCE

SELECT MAX(COALESCE(YEAR(DATE_PAID) * 100 + MONTH(DATE_PAID), SALYEAR * 100 + SALMONTH))
FROM tablename

使用相關子查詢 -

with temp as (
    select national_id, 
    max(to_number(to_char(salyear)||lpad(to_char(salmonth),2,'0'))) as max_salmonthyear
    from salary
    group by national_id)
select *
from salary s, temp t
where s.national_id = t.national_id
  and to_number(to_char(salyear)||lpad(to_char(salmonth),2,'0')) = t.max_salmonthyear
order by 1;

為什么不只使用聚合?

select nationalid, max(salyear * 100 + salmonth) as salyearmonth
from t
group by nationalid;

如果要將年月轉換為日期:

select nationalid,
       to_date(max(salyear * 100 + salmonth), 'YYYYMM') as salyearmonth
from t
group by nationalid;

這將返回工資月的第一個日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM