123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- const req = require('../../utils/request');
- const company = getApp().globalData.company;
- async function getConsecutiveSignIns(params) {
- let { userId } = params; // 从参数中获取用户ID
- // 构建 SQL 查询
- let sql = `
- WITH ranked_sign_ins AS (
- SELECT
- "user",
- "createdAt",
- DATE("createdAt") - INTERVAL '1 day' * ROW_NUMBER() OVER (PARTITION BY "user" ORDER BY "createdAt") AS grp,
- (CASE WHEN DATE("createdAt") = CURRENT_DATE OR (DATE("createdAt") + INTERVAL '1 day') = CURRENT_DATE THEN TRUE ELSE FALSE END) "isToday"
- FROM
- "EventLog"
- WHERE "user" = '${userId}'
- ),
- continuous AS (
- SELECT "user", grp
- FROM ranked_sign_ins
- WHERE "isToday" = TRUE
- GROUP BY "user", grp
- LIMIT 1
- ),
- grouped_sign_ins AS (
- SELECT
- ranked_sign_ins."user",
- ranked_sign_ins.grp,
- COUNT(*) AS consecutive_days
- FROM ranked_sign_ins
- LEFT JOIN continuous
- ON continuous.grp = ranked_sign_ins.grp AND continuous."user" = ranked_sign_ins."user"
- WHERE continuous.grp IS NOT NULL
- GROUP BY ranked_sign_ins."user", ranked_sign_ins.grp
- )
- SELECT
- "user",
- consecutive_days
- FROM grouped_sign_ins
- GROUP BY "user", consecutive_days;
- `;
- // 执行 SQL 查询
- let res = await req.customSQL(sql);
- return res;
- }
- module.exports = {
- getConsecutiveSignIns
- };
|