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_created의current_usage사이에 놓일 테이블 from_range그리고.to_range의history표:
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
'programing' 카테고리의 다른 글
| 양호한 C 문자열 라이브러리 (0) | 2023.08.12 |
|---|---|
| 작업 시트가 iPad에서 작동하지 않음 (0) | 2023.08.12 |
| Spring Scheduled 주석에서 고정 속도와 고정 지연의 차이점은 무엇입니까? (0) | 2023.08.12 |
| 당신은 PHP의 클래스 내에서 정적 상수를 사용할 수 있습니까? (0) | 2023.08.12 |
| openpyxl을 사용하여 .xlsx 시트에 있는 행과 열의 수를 가져오는 방법이 있습니까? (0) | 2023.08.12 |