Итак, я пытаюсь и изо всех сил пытаюсь в течение нескольких дней расширить схему с помощью настраиваемой группы, используя что-то вроде это
У меня есть таблица с несколькими полями вроде id, country, ip, created_at
. Затем я пытаюсь получить их как группы. Например, сгруппируйте данные по дате, почасовой дате или по стране, а также по стране с помощью DISTINCT ip.
Честно говоря, я ноль в SQL. Но я попытался поиграться и получить то, что хочу. Вот пример .
SELECT Hour(created_at) AS date,
COUNT(*) AS count
FROM session where CAST(created_at AS date) = '2021-04-05'
GROUP BY Hour(created_at)
ORDER BY date;
SELECT country,
count(*) AS count from (SELECT * FROM session where CAST(created_at AS date) <= '2021-05-12' GROUP BY created_at) AS T1
GROUP BY country;
SELECT country, COUNT(*) as count
FROM (SELECT DISTINCT ip, country FROM session) AS T1
GROUP BY country;
SELECT DATE(created_at) AS date,
COUNT(*) AS count
FROM session
GROUP BY DATE(created_at)
ORDER BY date;
Теперь я борюсь с двумя вещами.
- Как сделать дату переменными? Я имею в виду, что если я хочу сгруппировать их по определенному диапазону дат / или сегодняшним данным почасово или за квартал (больше настраиваемых), как мне добавить переменные в
Raw SQL
Хасуры? - Также для этого подхода мне нужно добавить схему для каждого из них? Нравится
CREATE
OR REPLACE VIEW "public"."unique_session_counts_date" AS
SELECT
date(session.created_at) AS date,
count(*) AS count
FROM
session
GROUP BY
(date(session.created_at))
ORDER BY
(date(session.created_at));
Есть ли способ сделать это более обобщенным? Я имею в виду, что если бы это было в Nodejs, я мог бы сделать что-то вроде
return rawQuery(
`
select ${field} x, count(*) y
from ${table}
where website_id=$1
and created_at between $2 and $3
${domainFilter}
${urlFilter}
group by 1
order by 2 desc
`,
params,
);
В этом случае, на основе любого поля и предложения where, которое я отправляю, один запрос поможет мне. Может в хасуре что-то подобное сделать?
Огромное спасибо заранее.