这将在 MySQL 中。表由以下字段组成:
Date, ID, blah, blahblah, blahblahblah
Run Code Online (Sandbox Code Playgroud)
我相信主键需要是日期和 ID。
我要运行的查询是针对每个Date,计算所有IDs但仅当这是 ID 显示的最后日期时。
因此,如果该 ID 在 2016 年 9 月 9 日出现在数据库中,但没有出现在 2016 年 9 月 10 日,那么我们会说它消失了,因此将其添加到 2016 年 9 月 9 日的总计数中。
如果该 ID 稍后在 9/11/16 再次出现,当我们再次运行查询时,该 ID 将不再添加到 9/9/16 的计数中。如果在 2016 年 9 月 12 日该 ID 再次消失,那么它将被添加到 2016 年 9 月 11 日的计数中。
这是一些示例数据。我没有为“废话”输入任何数据,因为它与查询无关(我相信):
日期,身份证,等等,等等,等等 2016 年 9 月 8 日,1 2016 年 9 月 8 日,2 2016 年 9 月 8 日,3 2016 年 9 月 8 日,4 2016 年 9 月 8 日,5 2016 年 9 月 8 日,6 2016 年 9 月 8 日,7 2016 年 9 月 8 日,8 2016 年 9 月 9 日,1 2016 年 9 月 9 日,2 2016 年 9 月 9 日,3 2016 年 9 月 9 日,4 2016 年 9 月 9 日,5 9/9/2016, 9 2016 年 9 月 9 日,10 2016 年 9 月 9 日,11 2016 年 9 月 10 日,2 2016 年 9 月 10 日,4 2016 年 9 月 10 日,6 2016 年 9 月 10 日,11 2016 年 9 月 10 日,12 2016 年 9 月 10 日,13
2016 年 9 月 9 日运行的预期输出为:
日期,最后一天的总 ID 9/8/16,3 9/9/16,8
2016 年 9 月 10 日运行的预期输出为:
日期,最后一天的总 ID 9/8/16,2 9/9/16,4 9/10/16,6
请注意,当查询在 2016 年 9 月 10 日运行时,2016 年 9 月 8 日的总数与在 2016 年 9 月 9 日运行时的总数不同,因为 ID(编号 6)消失后又重新出现。
一种选择是使用 anot exists过滤掉以后出现的任何行。
select date, count(*)
from your_table a
where not exists( select 1
from your_table b
where a.id = b.id
and b.date > a.date )
group by date
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |