월 계산을 할려고 하는되요 문의 드립니다.
본문
목적은
매월 전월 26에서 ~ 현재월 25일 정산처리 할려고 하는되요
매월 합산하는 쿼리는
--
SELECT CONCAT(YEAR(ct_select_time),'-',MONTH(ct_select_time)) AS ym, SUM(pt_sale)
FROM g5_shop_cart
WHERE YEAR(ct_select_time) = 2023 AND ct_status = '완료' AND ct_select = '1' AND pt_id='ID'
GROUP BY ym
--
결과
위처럼 하면 매월 1일 부터 마지막인거 같습니다.
특정날자로 매월 합산 값 가져오는 방법이 있을까요?
고수님들 조언 구합니다.
답변 5
이렇게 해보는건 어떠실까요?
$currentDate = date("Y-m-d");
$startDate = date("Y-m", strtotime($currentDate . " -1 month")) . "-26";
$endDate = date("Y-m") . "-25";
SELECT CONCAT(YEAR(ct_select_time),'-',MONTH(ct_select_time)) AS ym, SUM(pt_sale)
FROM g5_shop_cart
WHERE ct_select_time >= '시작일' AND ct_select_time <= '종료일'
AND ct_status = '완료' AND ct_select = '1' AND pt_id='ID'
GROUP BY ym
$currentDate = date("Y-m-d");
$startDate = date("Y-m", strtotime($currentDate . " -1 month")) . "-26";
$endDate = date("Y-m") . "-25";
SELECT CONCAT(YEAR(ct_select_time),'-',MONTH(ct_select_time)) AS ym, SUM(pt_sale)
FROM g5_shop_cart
WHERE (1) AND `ct_select_time` >= '{$startDate}' AND `ct_select_time` <= '{$endDate}'
AND `ct_status` = '완료' AND `ct_select` = '1' AND `pt_id`='ID'
GROUP BY ym
소스코드는 제이앤 님껄 참조했습니다.
특정날자로 매월 합산 값 가져오는 방법이 있을까요?
== 여기서 특정" 날짜라는 것이
매월 전월 26에서 ~ 현재월 25일 정산처리 할려고 하는되요
== 이걸 말씀하시는 건가요?
1. g5_shop_cart DB 테이블에 새 칼럼을 추가합니다. ex) ct_ym (정산월)
2. 해당 DB 테이블에 값이 저장되는 부분(파일)에서, ct_ym 을 미리 계산하여 넣어줍니다.
ex.
2023년 5월 25일에 저장되는 경우 => ct_ym : '2023-5'
2023년 5월 27일에 저장되는 경우 => ct_ym : '2023-6'
if (date('j') < 26)
$ct_ym = date('Y-n');
else
$ct_ym = date('Y-n', strtotime('+1 month'));
3. 합산쿼리
select ct_ym, sum(pt_sale)
from g5_shop_cart
where ct_select_time >= '2023'
and ct_status = '완료'
and ct_select = '1'
and pt_id='ID'
group by ct_ym
order by 1
SELECT
CONCAT(YEAR(ct_select_time), '-', LPAD(MONTH(ct_select_time) + (CASE WHEN DAY(ct_select_time) < 26 THEN 0 ELSE 1 END), 2, 0)) g
-- CONCAT(YEAR(ct_select_time),'-',MONTH(ct_select_time)) AS ym
, SUM(pt_sale)
FROM g5_shop_cart
WHERE YEAR(ct_select_time) = 2023 AND ct_status = '완료' AND ct_select = '1' AND pt_id='ID'
-- GROUP BY ym ;
GROUP BY g
HAVING SUBSTR(g, -2, 2) != '13';