【问题标题】:Get distinct count of id in a set of days (on a particular date and previous 2 days)在一组天(在特定日期和前 2 天)获取不同的 id 计数
【发布时间】:2018-06-06 09:49:16
【问题描述】:

我的表中有 4 列,rii、uii、rdi 和 udi。如下所示:

+----------+------+----------+------+
|       rdi|   rii|       udi|   uii|
+----------+------+----------+------+
|2002-02-06|1376.Q|2002-02-06|1376.Q|
|2002-02-28|1376.Q|2002-02-28|1376.Q|
|2002-03-06|1376.Q|2002-03-06|1376.Q|
|2002-02-01|1792.T|2002-02-01|1792.T|
|2002-03-07|1802.T|2002-03-07|1802.T|
|2002-03-08|1802.T|2002-03-08|1802.T|
|2002-04-03|1802.T|2002-04-03|1802.T|
|2002-03-07|1805.T|2002-03-07|1805.T|
|2002-02-18|1810.T|2002-02-18|1810.T|
|2002-03-22|1821.T|2002-03-22|1821.T|
|2002-02-27|1862.T|2002-02-27|1862.T|
|2002-04-11|1878.T|2002-04-11|1878.T|
|2002-04-18|1884.T|2002-04-18|1884.T|
|2002-02-27|1899.T|2002-02-27|1899.T|
|2002-03-11|1924.T|2002-03-11|1924.T|
|2002-02-05|1925.T|2002-02-05|1925.T|
|2002-01-23|1926.T|2002-01-23|1926.T|
|2002-03-19|1926.T|2002-03-19|1926.T|
|2002-01-25|1942.T|2002-01-25|1942.T|
|2002-01-31|1942.T|2002-01-31|1942.T|
+----------+------+----------+------+

我只想在逻辑上获取唯一 rii 的数量,例如如果我将回溯设为 2,那么它应该在一组天(在该特定 rdi 和 rdi 的前 2 天)内给出唯一的 rii 数量

所以我将回溯设为 2,我的结果应该是(对于 rdi = 2002-02-06,它应该在 (2002-02-06,2002-02-05,2002 -02-04))

+----------+-------------+----------+------+
|       rdi|          rii|       udi|   uii|
+----------+-------------+----------+------+
|2002-02-06|1376.Q,1925.T|2002-02-06|1376.Q|

我尝试了以下查询,但没有得到所需的 o/p

select count(distinct uii) as u,
  rdi,
  (select count(distinct rii) from `mytable` where rdi between DATE_SUB(rdi, INTERVAL 2 DAY) AND rdi) as r
  from `mytable`
  group by rdi 
  order by rdi;

检查我的小提琴here

【问题讨论】:

    标签: mysql sql pyspark


    【解决方案1】:

    您可以使用LEFT JOIN 将每条记录与前几天的记录相关联:

    select t1.rdi, 
           group_concat(t2.rii) as rii, 
           t1.udi,
           count(distinct t2.uii)
    from `mytable` as t1
    left join `mytable` as t2
       on t2.rdi between DATE_SUB(t1.rdi, INTERVAL 2 DAY) AND t1.rdi
    group by rdi 
    order by rdi;
    

    输出:

    Demo here

    【讨论】:

    • 这确实有效,需要用主数据集检查它,非常感谢。真的很有帮助,如果你提出建议,你对这个问题的思考过程是什么。谢谢
    • @ggupta 关键思想是将每条记录与当前日期和前两天内的记录子集相关联。这样你会得到很多重复,但这没问题,因为你只想做一个count distinct
    • 你基本上把问题分解成小问题,但我对左连接有很好的了解。谢谢乔戈斯
    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2020-04-06
    相关资源
    最近更新 更多