Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在30分钟间隔内对24小时数据进行分组,以获取计数?

如何在30分钟间隔内对24小时数据进行分组,以获取计数?
EN

Stack Overflow用户
提问于 2021-07-25 12:00:52
回答 3查看 84关注 0票数 1

我在sales表中有一个字段名为timestamp,其数据格式为: 20210725.1800,表示2021年07月25日00:30:00 AM

现在,如果我想要在20210725.0000到20210725.1800之间的30分钟间隔内计算销售额,我可以简单地写下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def var k as int no-undo.

for each sales no-lock 
   where salesdate =  07/25/2021 
   and   timestamp >= 20210725.0000
   and   timestamp <= 20210725.1800
:

   if available sales then do:

      k = k + 1.
      pause 0.

      display k with frame f.

   end.

end.

但是,我不想通过更改timestamp字段的开始和结束时间来运行同一查询24次。

因此,我正在寻找一种更聪明的方法来找出这个时间戳字段上按30分钟间隔分组的全天销售计数。

EN

回答 3

Stack Overflow用户

发布于 2021-07-25 19:23:27

你可以按照下面的思路做一些事情。如果您还想要多个日期,也可以按salesdate对查询进行排序,尽管您必须在每个新日期清除整数数组(有关如何执行此操作的信息,请参阅byandbreak by`文档)。

ts变量的计算将取决于十进制值是如何构造的:.1800和.18002是否在同一个30分钟的时段中?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def var numSales as integer extent 24 no-undo.
def var k as integer no-undo.
def var ts as integer.

for each sales 
 no-lock 
   where salesdate eq 07/25/2021:

    // get the timestamp for the day
    // this could use a calculation like the below,
    // or a simple CASE statement
    ts = 10000 * (timestamp - decimal(string(year(salesdate)) + string(month(salesdate)) + string(day(salesdate)))).

    // find the 30-minute slot. +1 makes it a 'ceiling'
    numSales[integer(ts / (30 * 60)) + 1] += 1.
end.

do k = 1 to 24 with frame f:
    displ
       k (k * 30 * 60) numsales[k].
end.    
票数 1
EN

Stack Overflow用户

发布于 2021-08-06 06:51:09

如果我跳过我关于时间戳是如何构造的问题,您可以使用break by来获取结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def temp-table ttsales no-undo
   field salesdate as date
   field timestamp as decimal
   .

function createSale returns logical (
   i_detimestamp as decimal
):

   def buffer busale for ttsales.

   def var idate  as int.
   def var iyear  as int.
   def var imonth as int.
   def var iday   as int.

   assign
      idate  = truncate( i_detimestamp, 0 )
      iyear  = truncate( idate / 10000, 0 )
      idate  = idate - iyear * 10000
      imonth = truncate( idate / 100, 0 )
      iday   = idate - imonth * 100      
      .

   create busale.
   assign
      busale.salesdate = date( imonth, iday, iyear )
      busale.timestamp = i_detimestamp
      .

end function.

createSale( 20210725.0000 ).
createSale( 20210725.0001 ).
createSale( 20210725.1799 ).
createSale( 20210725.1800 ).
createSale( 20210725.1801 ).

def buffer busale for ttsales.

def var irecords as int.
def var idate    as int.

for each busale
   where busale.salesdate = 07/25/2021
break 
   by truncate( busale.timestamp * 10000 / 1800, 0 )
:

   irecords = irecords + 1.

   if last-of( truncate( busale.timestamp * 10000 / 1800, 0 ) ) then do:
      display 
         int( truncate( ( ( busale.timestamp * 10000 ) modulo 10000 ) / 1800, 0 ) )
         irecords
         .
      irecords = 0.
   end.

end.

ABLdojo中尝试一下。

票数 1
EN

Stack Overflow用户

发布于 2021-07-26 13:18:33

只要每个子查询的效率与一个大查询的效率一样高,那么运行同一查询24次(或任何其他)并没有什么错。

如果你的代码对3年后试图理解你所做的事情的维护程序员来说更加清晰,那么这样做并没有错。

下面的示例只使用了一个日期字段,因为无处不在的"sports“数据库没有任何具有您的示例所具有的date.time样式的字段,但是它应该很容易推断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
define variable n as integer no-undo.
define variable d as date    no-undo.

define variable b as handle no-undo.
define variable q as handle no-undo.

create buffer b for table "order".
create query q.
q:set-buffers( b ).

do d = 1/1/1998 to 1/31/1998:

  n = 0.
  q:query-prepare( substitute( 'preselect each order no-lock where orderDate = &1', d )).
  q:query-open no-error.
  if q:query-off-end = no then
    n = q:num-results no-error.
  display d n with frame a down.
  down with frame a.
  q:query-close no-error.

end.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68518351

复制
相关文章
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
5.7K0
Matlab从移动设备获取加速度数据对步数进行计数
本文分享如何从 Android或 iOS (我的手机是ios)移动设备收集加速度数据,并使用它来对行走步数进行计数。
用户9925864
2022/07/27
1K0
Matlab从移动设备获取加速度数据对步数进行计数
对大文件字符进行计数
但是当文件过大时,会报错,显示空间不足: sort: write failed: /tmp/sortbDyE0W: No space left on device
生信编程日常
2020/10/10
6280
根据分组依据对Java集合元素进行分组
业务背景:在项目中有个“分账”功能,就是支付的钱一部分要根据不同商品的分账金额自动分给平台提供商。
张张
2019/12/25
2.4K0
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.5K0
pandas使用技巧-分组统计数据
因为数据是随机生成的,我们需要检查是否有出现这种情况:name、subject、time、grade4个字段相同,但是score出现了两次,防止数据不规范。写了一个循环来进行判断:
皮大大
2021/03/07
2.2K0
Python对字典根据键值分组进行排序
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119530.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
4.5K0
Python分组内排序
Code : two_di_list = [[0, 1], [2, 3, 4]] for sub_list in two_di_list: sub_list.sort(reverse=True) print(two_di_list) Output : [[1, 0], [4, 3, 2]]
py3study
2020/01/03
6970
sql对多个条件进行分组求和_分组求和法例题附答案
大家好,又见面了,我是你们的朋友全栈君。 在ireport中实现分组,求和。效果如下 name total A 2 A 3 subtotal 5 B 4 B 5 subtotal 9 添加Document–>Variables–>Variable Name 建立自定义的求和函数 设置相关属性。 Calculation 设置为sum reset type为report Reset group 选择自己创建的分组。 increment type 为Group Variable Expression填写你要累计的对象表达式。 new Integer($F{rxNo}) Initial Value Expression处填写数据类型的初始化对象。 new java.lang.Integer(0)
全栈程序员站长
2022/10/03
2.8K0
Java8 Stream groupingBy对List进行分组
提到Group By,首先想到的往往是sql中的group by操作,对搜索结果进行分组。其实Java8 Streams API中的Collector也支持流中的数据进行分组和分区操作,本片文章讲简单介绍一下,如何使用groupingBy 和 partitioningBy来对流中的元素进行分组和分区。
全栈程序员站长
2022/09/24
4K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
【数据业务】几招教你如何在R中获取数据进行分析
【IT168 编译】本文是《R编程语言》中一个系列的第二部分。在第一部分中,我们探索如何使用R语言进行数据可视化。第二部分将探讨如何在R语言中获取数据并进行分析。  如今,想要购买一部手机已成为
小莹莹
2018/04/23
2.1K0
【数据业务】几招教你如何在R中获取数据进行分析
0882-7.1.6-如何对HDFS进行节点内(磁盘间)数据平衡
1.文档编写目的 当HDFS的DataNode节点挂载多个磁盘时,往往会出现两种数据不均衡的情况: 1.不同DataNode节点间数据不均衡; 2.挂载数据盘的磁盘间数据不均衡。 特别是这种情况:当DataNode原来是挂载了几个数据盘,当磁盘占用率很高之后,再挂载新的数据盘。由于Hadoop 2.x 版本并不支持HDFS的磁盘间数据均衡,因此,会造成老数据磁盘占用率很高,新挂载的数据盘几乎很空。在这种情况下,挂载新的数据盘就失去了扩容HDFS数据盘的意义。 如果想要解决节点内多块磁盘数据不均衡的现象,就要
Fayson
2022/07/19
2K1
0882-7.1.6-如何对HDFS进行节点内(磁盘间)数据平衡
[MySQL] group by 分组并进行组内排序取得最新一条
有一个需求是获取指定用户发送的最新的内容 , 这个时候需要使用group by分组功能
唯一Chat
2020/10/28
3.8K0
时间间隔计数器的功能说明
本文主要通过概念性的阐述,对时间间隔计数器的功能做了简单的说明,同时对市场上目前广泛应用的SYN5636型高精度通用计数器的功能做了介绍,帮助客户在对时间间隔计数器进行选择时进行参考,同时可对这款计数器可实现的功能进行简单的了解。
时频专家
2019/06/11
1.6K0
时间间隔频率计数器的使用介绍
时间频率计数器,顾名思义就是用来测量时间间隔,频率,频率比,累加计数,周期,计时等,基本工作原理是以适当的逻辑电路,具有多种测量功能,主要包括频率、周期和时间间隔测量,通常还包括频率比、任意时间间隔内脉冲个数以及累加计数等测量功能。
时频专家
2020/09/18
1.4K0
ABAP 动态内表分组循环
在ABAP中使用动态内表分组循环时,如果直接at end of 或group by 会报错。 At end of :
惨绿少年.
2022/05/27
8681
ABAP 动态内表分组循环
Pandas|排序,分组,组内排序
01 Pandas的基本排序 Pandas的主要数据结构有2个:DataFrame,Series,针对这两个类型的排序Demo如下: #coding=utf-8 import pandas as pd import numpy as np #以下实现排序功能。 series=pd.Series([3,4,1,6],index=['b','a','d','c']) frame=pd.DataFrame([[2,4,1,5],[3,1,4,5],[5,1,4,2]],columns=['b
double
2018/04/02
7.3K0
点击加载更多

相似问题

MySQL对彼此相同间隔内的行数进行计数

20

以R为间隔对数据进行分组

27

对包含间隔数据的数据集中每年的观测值进行分组和计数

10

对字段进行分组,以提供某个范围内的值的计数

122

对多列进行分组和获取计数

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文