永洪社区

标题: 如何只展示筛选时间之前最新的数据? [打印本页]

作者: Gnoc    时间: 2023-4-26 16:32
标题: 如何只展示筛选时间之前最新的数据?
本帖最后由 Gnoc 于 2023-4-26 16:34 编辑

有以下数据:
用户
总分
时间
A
1
2023/4/12
A
2
2023/4/13
B
21
2023/4/14
B
45
2023/4/15
C
111
2023/4/16
C
222
2023/4/17
C
333
2023/4/18
B
40
2023/4/19
D
12
2022/3/19


想要实现效果:只展示每个用户筛选时间之前最新一条的数据
1. 当截止时间选择2023/4/16
用户
总分
时间
A
2
2023/4/13
B
45
2023/4/15
C
111
2023/4/16
D
12
2022/3/19
2. 当截止时间选择2023/4/20
用户
总分
时间
A
2
2023/4/13
B
40
2023/4/19
C
333
2023/4/18
D
12
2022/3/19


作者: yhdata_lyaa    时间: 2023-4-26 16:32
第一步
SQL数据集写SQL,例如:
用参数a来过滤时间,需要在数据集给个默认值。
SELECT t1.*
FROM bi941.newtable_2 t1
JOIN (
  SELECT id, MAX(时间) AS max_timestamp
  FROM bi941.newtable_2
  WHERE <a>  时间<=?{a}</a>
  GROUP BY id
) t2
ON t1.id = t2.id AND t1.时间= t2.max_timestamp;

第二步,新建报告,使用文本参数,取名为a,选择对应日期类型。
就可以参与SQL过滤了。
SQL参与过滤参考https://yonghongtechonline.udesk.cn/question/226409

作者: yhdata_yzm    时间: 2023-4-26 16:56

SELECT *
FROM your_table t1
WHERE t1.timestamp <= your_filter_time
AND t1.id = (
  SELECT MAX(t2.id)
  FROM your_table t2
  WHERE t2.user_id = t1.user_id
  AND t2.timestamp <= your_filter_time
)
```

其中,`your_table` 是你要查询的表,`timestamp` 是该表中表示时间的列,`user_id` 是该表中表示用户的列,`your_filter_time` 是你的筛选时间。

这个查询语句首先筛选出时间在 `your_filter_time` 之前的所有记录。然后,对于每个用户,它只选择其最新的一条记录。为了实现这一点,它使用了一个子查询,在其中选择用户的最大 `id`,并将其与该用户的其他记录进行比较。只有最新的记录会满足条件,因为它具有最大的 `id`。最终,该查询返回每个用户在筛选时间之前的最新一条记录。
作者: Gnoc    时间: 2023-4-26 17:01
yhdata_yzm 发表于 2023-4-26 16:56
SELECT *
FROM your_table t1
WHERE t1.timestamp

目前需要在BI报告页面实现该功能,筛选时间是文本参数组件控制。
作者: Gnoc    时间: 2023-5-9 21:45
yhdata_lyaa 发表于 2023-4-26 16:32
第一步
SQL数据集写SQL,例如:
用参数a来过滤时间,需要在数据集给个默认值。

因为数据量过大,如果不设置调度,前端报表基本加载不出来;如果设置调度,在重新选择参数后,必须释放数据集重新跑一遍调度才能生效。请问要怎么解决呢?




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4