我有醫院的表格,我需要在其中顯示從這個月到這個月的病人支出。假設我有日期,例如。從 2020 年 1 月 5 日到 2020 年 2 月 20 日,我需要這兩個日期之間的月度資料,例如 1 月 1 日至 1 月 30 日和 2 月 1 日至 2 月 20 日的資料。請提出一些我嘗試但無法在兩個日期之間獲取的查詢。
我需要的結果集示例:
MONTH PT_Expen
----------------
JAN-20 30000
FEB-20 50000
MAR-20 60000
這是我的表結構
PT_EXP PT_NAME CREATED_DATE
---------------------------------
30000 JACK 07/01/2020
30000 SWETA 08/01/2020
30000 RAM 08/01/2020
40000 JOHN 01/02/2020
60000 SIMON 10/03/2020
70000 KIRA 11/04/2020
如果我將 fromdate 指定為 JAN1 并將 todate 指定為 MAR24 我需要從 jan1 到 jan 30 的資料一個資料,feb1 到 feb28 的一個資料,Mar1 到 Mar24 的一個資料和我的日期格式:'dd/mm/yyyy'
uj5u.com熱心網友回復:
這是TRUNC()和ADD_MONTHS() 的作業。
Oracle 的 TRUNC() 函式適用于日期戳,它們可以被截斷到最近的月份。也就是說,TRUNC('2021-03-20', 'MM')讓你2021-03-01。這意味著您可以輕松選擇月份范圍和按月分組。此示例報告當前 (sysdate) 日歷月及其之前的兩個月。
SELECT TRUNC(datestamp, 'MM') AS month_beginning,
patient,
SUM(payment) AS total_payment,
COUNT(*) AS number_of_payments
FROM my_table
WHERE datestamp >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -2)
AND datestamp < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1)
GROUP BY patient, TRUNC(datestamp, 'MM')
ORDER BY patient, TRUNC(datestamp, 'MM')
編輯如果要指定起始日期和結束日期,并獲取包含這些日期的整個月份以及它們之間的月份,請使用此選項。
SELECT TRUNC(datestamp, 'MM') AS month_beginning,
patient,
SUM(payment) AS total_payment,
COUNT(*) AS number_of_payments
FROM my_table
WHERE datestamp >= TRUNC(start_date, 'MM')
AND datestamp < ADD_MONTHS(TRUNC(end_date, 'MM'), 1)
GROUP BY patient, TRUNC(datestamp, 'MM')
ORDER BY patient, TRUNC(datestamp, 'MM')
uj5u.com熱心網友回復:
一種選擇可能是
SQL> with your_table (pt_exp, pt_name, created_date) as
2 (select 30000, 'JACK' , date '2020-01-07' from dual union all
3 select 30000, 'SWETA', date '2020-01-08' from dual union all
4 select 30000, 'RAM' , date '2020-01-08' from dual union all
5 select 40000, 'JOHN' , date '2020-02-01' from dual union all
6 select 60000, 'SIMON', date '2020-03-10' from dual union all
7 select 70000, 'KIRA' , date '2020-04-11' from dual
8 )
9 select to_char(created_date, 'yyyy.mm') month,
10 sum(pt_exp) pt_expen
11 from your_table
12 where created_date between date '2020-01-05' and date '2020-02-20'
13 group by to_char(created_date, 'yyyy.mm')
14 order by 1;
MONTH PT_EXPEN
------- ----------
2020.01 90000
2020.02 40000
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313701.html
