Я пытаюсь получить список всех пользователей в базе данных. Тогда у меня есть другая таблица, где у меня есть только пользователи, которые являются членами.
Проблема в том, что некоторые из тех, кто сегодня являются членами, могли быть клиентами, членами или ни одним из них ранее. Так что мы могли бы иметь дубликаты.
Что я хочу сделать, это выбрать только самую последнюю запись, основанную на столбце даты, который присутствует в базе данных.
Вот две таблицы вывода:
Таблица пользователей:
Таблица пользователей
Таблица участников:
Таблица членов
Хотите присоединиться к таблицам слева с сохранением всех отдельных записей из таблицы пользователей и большинства совпадающих записей из таблицы участников с самым последним значением cd.value.
WITH users AS(
SELECT
fullVisitorId AS Clientid
FROM `records`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY))
AND
FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
totals.visits = 1
), members As(
SELECT
MAX(date) AS date,
fullVisitorId AS Clientid,
cd.value AS CD_value,
cd.index AS CD_index
FROM `records`,
UNNEST(customDimensions) AS cd
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 10 DAY))
AND
FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
totals.visits = 1
AND
cd.index = 6
group by
Clientid,
CD_value,
CD_index
)
SELECT
users.ClientId AS clientId,
members.CD_value
from users
LEFT JOIN members ON users.ClientId = members.Clientid
group by
members.CD_value,
clientId
order by
clientId ASC