programing

MYSQL에서 매월 최대 날짜를 가져오는 방법

javajsp 2023. 8. 12. 09:50

MYSQL에서 매월 최대 날짜를 가져오는 방법

어떻게 하면 매월 최대 날짜를 알 수 있습니까?제가 무엇을 잘못하고 있는지는 모르겠지만 제 결과에 따라 데이터가 중복되고 있습니다.

여기 테이블이 있습니다.

history table
|ID |  from_range   |      to_range       |     price  |      main_id
1   2019-09-01 00:00:00   2019-09-15 00:00:00       5           1
2   2019-09-16 00:00:00   2019-09-30 00:00:00       10          1
3   2019-10-01 00:00:00   2019-10-15 00:00:00       15          1
4   2019-10-16 00:00:00   2019-10-19 00:00:00       20          1
5   2019-10-20 00:00:00   0000-00-00 00:00:00       25          1
current_usage table
id    main_id    total_usage   date_created
1         1          10         2019-09-01     
2         1          10         2019-09-02 
3         1          10         2019-09-03 
4         1          10         2019-09-04 
5         1          10         2019-09-05 
6         1          10         2019-09-06 
7         1          20         2019-09-07 
8         1          5          2019-09-08 
9         1          5          2019-09-09 
10        1          10         2019-09-10 
11        1          10         2019-09-15     
12        1          10         2019-09-16 
13        1          10         2019-09-17 
14        1          10         2019-09-18 
15        1          10         2019-09-19 
16        1          10         2019-09-20 
17        1          20         2019-09-25 
18        1          5          2019-09-26 
19        1          5          2019-09-27 
20        1          10         2019-09-30
21        1          10         2019-10-01 
22        1          10         2019-10-02    
23        1          10         2019-10-03 
24        1          10         2019-10-10 
25        1          10         2019-10-11 
26        1          10         2019-10-12
27        1          10         2019-10-18 
28        1          20         2019-10-20
29        1          5          2019-10-21 
30        1          5          2019-10-22
31        1          10         2019-10-23  

그래서 내 history_table에서, 나는 매달 date_range를 받았는데, 그것은 사용자가 하루에 몇 번 비용을 변경하느냐에 달려 있습니다.

그래서 기본적으로

출력은 다음과 같아야 합니다.

id   price         range_date         total_usage  
1      5     2019-09-01 - 2019-09-15  SUM(total_usage) based on the date range
2      10    2019-09-16 - 2019-09-30  SUM(total_usage) based on the date range
3      15    2019-10-01 - 2019-10-15  SUM(total_usage) based on the date range
4      20    2019-10-16 - 2019-09-19  SUM(total_usage) based on the date range
5      25    2019-10-20 - 2019-10-31  SUM(total_usage) based on the date range

그리고 그 이후에 저는 5개의 행의 출력을 바탕으로 매달 모든 것을 합산할 계획입니다.

여기 제 현재 질문이 있습니다. 가격 기록이 하나만 있으면 할 수 있었고 가격 기록이 하나만 있으면 할 수 있는 별도의 질문이지만, 여러 가격 기록의 경우 매달 범위와 합계를 얻기가 정말 어렵습니다.

SELECT price.price,
       price.from _range AS first_range, 
       price.to_range AS second_range,  
       (current_usage.total_usage),
       current_usage.date_created
FROM history AS price
INNER JOIN current_usage AS current_usage 
        ON price.main_id = current_usage .main_id
INNER JOIN(SELECT MAX(to_range) AS maxdate
           FROM history
           GROUP BY YEAR(to_range), MONTH(to_range)) x ON price.to_range= maxdate

어떤 도움이라도 주시면 정말 감사하겠습니다, 정말 도움이 필요합니다.

내가 정확히 이해했다면, 당신은 단순히 다음을 기반으로 한 가입이 필요합니다.date_createdcurrent_usage사이에 놓일 테이블 from_range그리고.to_rangehistory표:

SELECT 
  p.id, 
  p.price, 
  DATE(p.from_range) AS first_range, 
  DATE(IF(p.to_range = '0000-00-00 00:00:00', LAST_DAY(p.from_range), p.to_range)) AS second_range,
  SUM(c.total_usage) AS total_usage
FROM history AS p
INNER JOIN current_usage AS c
        ON c.main_id = p.main_id 
           AND c.date_created BETWEEN DATE(p.from_range) AND DATE(IF(p.to_range = '0000-00-00 00:00:00', LAST_DAY(p.from_range), p.to_range))
GROUP BY p.id 

라고 가정하고 있습니다.id의 란history테이블이 기본 키입니다.따라서 나머지 비집계 열은historySELECT 절의 표는 기능적으로 의존적이므로, 그것들을 지정할 필요가 없습니다.GROUP BY

언급URL : https://stackoverflow.com/questions/58251954/how-to-get-the-max-date-from-each-month-in-mysql