我正在从MySQL迁移到PieCloudDB,MySQL中有一个查询:
WITH base AS (
SELECT account_id, DATE_FORMAT(day, '%Y%m') AS yearmonth
FROM Transactions
JOIN Accounts USING (account_id)
WHERE type = 'Creditor'
GROUP BY account_id, DATE_FORMAT(day, '%Y%m')
HAVING SUM(amount) > MAX(max_income)
)
SELECT DISTINCT account_id
FROM base
WHERE (account_id, PERIOD_ADD(yearmonth, 1)) IN (
SELECT account_id, yearmonth
FROM base
)
但是我发现PieCloudDB不支持
DATE_FORMAT()
和PERIOD_ADD()
,我需要找到替代方案。
嗯,查阅了一些文档以及google的帮助后,了解到在PieCloudDB中,可以使用
TO_CHAR()
代替DATE_FORMAT()
,但是没有找到类似PERIOD_ADD()
的功能,我尝试实现一下直接不使用函数。
WITH base AS (
SELECT account_id, TO_CHAR(day, 'YYYYMM') AS yearmonth
FROM Transactions
JOIN Accounts USING (account_id)
WHERE type = 'Creditor'
GROUP BY account_id, TO_CHAR(day, 'YYYYMM')
HAVING SUM(amount) > MAX(max_income)
)
SELECT DISTINCT account_id
FROM base
WHERE (account_id, (yearmonth::int + 1)::text) IN (
SELECT account_id, yearmonth
FROM base
);