#mysql #sql
#mysql #sql
Вопрос:
Этот запрос возвращает 154 строки
SELECT s_campaign_id, COUNT(b_entry_type_tag)::decimal * 1 AS tags,(COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1 AS redirects,COUNT(b_entry_type_cnv)::decimal * 100 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS crp,SUM(f_revenue) * 1000 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS rrm,COUNT(b_entry_type_cnv) AS conversions,SUM(CASE WHEN d_gen_date BETWEEN '2021-01-31' AND '2021-01-31'THEN f_revenue ELSE 0 END) AS revenue,SUM(CASE WHEN d_gen_date BETWEEN'2021-01-30'AND'2021-01-30'THEN f_revenue ELSE 0 END) AS revenue2 FROM tbl_reports WHERE (d_gen_date>='2021-01-31' AND d_gen_date<='2021-01-31') GROUP BY s_campaign_id
в то время как это
SELECT s_campaign_id, COUNT(b_entry_type_tag)::decimal * 1 AS tags,(COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1 AS redirects,COUNT(b_entry_type_cnv)::decimal * 100 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS crp,SUM(f_revenue) * 1000 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS rrm,COUNT(b_entry_type_cnv) AS conversions,SUM(CASE WHEN d_gen_date BETWEEN '2021-01-31' AND '2021-01-31'THEN f_revenue ELSE 0 END) AS revenue,SUM(CASE WHEN d_gen_date BETWEEN'2021-01-30'AND'2021-01-30'THEN f_revenue ELSE 0 END) AS revenue2 FROM tbl_reports WHERE ((d_gen_date>='2021-01-30'AND d_gen_date<='2021-01-30')OR(d_gen_date>='2021-01-31' AND d_gen_date<='2021-01-31')) GROUP BY s_campaign_id
возвращает 206 строк.
Я не понимаю, почему
Комментарии:
1. Ваш вопрос помечен как MySQL, но это недопустимый код MySQL.
2. Единственное отличие в предложении WHERE? Второй запрашивает 2 дня (неуклюжим способом).
Ответ №1:
Вы можете использовать ORDER BY
и LIMIT
:
SELECT d_gen_date, COUNT(b_entry_type_tag)::decimal * 1 AS tags,
(COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1 AS redirects,
COUNT(b_entry_type_cnv)::decimal * 100 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS crp,
SUM(f_revenue) * 1000 / NULLIF((COUNT(CASE WHEN b_entry_type_red = true AND s_request_type NOT IN ('Y0', 'YX') THEN 1 ELSE NULL END))::decimal * 1,0) AS rrm,
COUNT(b_entry_type_cnv) AS conversions,
SUM(CASE WHEN d_gen_date BETWEEN '2021-01-31' AND '2021-01-31'THEN f_revenue ELSE 0 END) AS revenue,
SUM(CASE WHEN d_gen_date BETWEEN'2021-01-30'AND'2021-01-30'THEN f_revenue ELSE 0 END) AS revenue2
FROM tbl_reports
WHERE (d_gen_date >= '2021-01-30'AND d_gen_date <= '2021-01-30') OR
(d_gen_date >= '2021-01-31' AND d_gen_date <= '2021-01-31')
GROUP BY d_gen_date
ORDER BY d_gen_date DESC
LIMIT 1;
Комментарии:
1. любой другой способ сделать это без order by и limit 1? поскольку d_gen_date является динамическим и изменяется на другой столбец
2. @cgvfgf34 . , , я не уверен, что означает ваш комментарий. Это отвечает на вопрос, который вы задали здесь — и
d_gen_date
выглядит как столбец в этом запросе.