sql – 考虑组中的每个id的单个记录
发布时间:2020-12-12 08:58:47 所属栏目:MsSql教程 来源:网络整理
导读:背景 我有一个包含4列的SQL表: id – varchar(50) g1 – varchar(50) g2 – varchar(50) datetime – 时间戳 我有这个问题: SELECT g1,COUNT(DISTINCT id),SUM(COUNT(DISTINCT id)) OVER () AS total,(CAST(COUNT(DISTINCT id) AS float) / SUM(COUNT(DISTI
背景
我有一个包含4列的SQL表: > id – varchar(50) 我有这个问题: SELECT g1,COUNT(DISTINCT id),SUM(COUNT(DISTINCT id)) OVER () AS total,(CAST(COUNT(DISTINCT id) AS float) / SUM(COUNT(DISTINCT id)) OVER ()) AS share FROM my_table and g2 = 'start' GROUP BY 1 order by share desc 构建此查询是为了回答:用户中g1值的分布是什么? 问题 每个id可能在表中有多个记录.我想考虑最早的一个.早期意味着,最小日期时间值. 例 表 id g1 g2 datetime x1 a start 2016-01-19 21:01:22 x1 c start 2016-01-19 21:01:21 x2 b start 2016-01-19 09:03:42 x1 a start 2016-01-18 13:56:45 实际查询结果 g1 count total share a 2 4 0.5 b 1 4 0.25 c 1 4 0.25 我们有4条记录,但我只想考虑两条记录: x2 b start 2016-01-19 09:03:42 x1 a start 2016-01-18 13:56:45 这是每个id最早的记录. 预期的查询结果 g1 count total share a 1 2 0.5 b 1 2 0.5 题 我如何仅考虑组中每个id的最早记录 解决方法您正在查询my_table的所有数据,尽管您只想拥有最早的id日期.我假设id是表中的主键.我建议您定义一个视图(或内联视图),它只查询id的最早日期,并在该视图上使用您的查询而不是my_table. 视图可以定义为如此,并且只包含最早日期的id: select * from my_table a where a.datetime = (select min(z.datetime) from my_table z where a.id = z.id) and a.g2 = 'start' 您可以将其定义为视图或直接使用它,如下所示: SELECT g1,(CAST(COUNT(DISTINCT id) AS float) / SUM(COUNT(DISTINCT id)) OVER ()) AS share FROM (select a.id,a.g1,a.g2,a.datetime from my_table a where a.datetime = (select min(z.datetime) from my_table z where a.id = z.id) and a.g2 = 'start') GROUP BY 1 order by share desc (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
热点阅读