//获取最开始的日期
WITH TEMP AS (
SELECT
<if test="timeNum == 6">
DATE_TRUNC( 'day', NOW( ) ) - INTERVAL '6 day' start_time,
</if>
<if test="timeNum == 30">
DATE_TRUNC( 'day', NOW( ) ) - INTERVAL '30 day' start_time,
</if>
DATE_TRUNC( 'day', NOW( ) ) + INTERVAL '1 day' end_time
),
date_range AS (
SELECT
generate_series (
DATE_TRUNC( 'day', TEMP.start_time ) :: DATE,
DATE_TRUNC( 'day', TEMP.end_time - INTERVAL '1 day' ) :: DATE,
'1 day' :: INTERVAL
) AS DATE
FROM
TEMP
)
SELECT
TO_CHAR( date_range.DATE, 'YYYY-MM-DD' ) AS dateTime,
COALESCE ( localCount, 0 ) AS localCount
FROM
date_range
LEFT JOIN (
SELECT
TO_CHAR( DATE ( T.product_send_time ), 'YYYY-MM-DD' ) AS dateTime,
COUNT ( * ) AS localCount
FROM
(
//这里是你查询数据的sql 主要替换这里
SELECT
product_send_time
FROM
t_local_warning_info_details
WHERE
create_user = #{userId}
AND ( account_id, element_type_id ) IN (
SELECT
te.element_unique_key,
te.type_id
FROM
t_element te
WHERE
te.create_user = #{userId}
AND ( NOT EXISTS ( SELECT 1 FROM t_element_white_v2 WHERE check_status = 2 AND te.element_unique_key = element_unique_key AND type_id = te.type_id ) )
AND te.monitoring_source = 1
)
) AS T
GROUP BY
TO_CHAR( DATE ( T.product_send_time ), 'YYYY-MM-DD' )
) AS subquery ON TO_CHAR( date_range.DATE, 'YYYY-MM-DD' ) = subquery.dateTime
ORDER BY
date_range.DATE
pgsql 查询最近6天或是30天 (时间可以自己设置)的数据根据时间分组统计,查询每天的数量
最新推荐文章于 2024-06-21 14:10:39 发布