如何获取SQL中列的平均日期间隔?

时间:2018-05-18 12:35:39

标签: sql postgresql date group-by average

我在网站上有一个用户交互表,我需要计算每个用户之间的平均交互时间。为了使其更容易理解,这里有一些表的记录:

Table of user interactions

第一列是用户ID,第二列是交互时间。我需要的结果是每个用户的交互之间的平均时间。示例:

  • 用户12345平均交互间隔为1天

我已经尝试过使用窗口函数,但我无法获得平均值,因为PostgreSQL不允许我在窗函数上使用GROUP BY或AVG,我可以使用以下命令,但无法根据用户ID对其进行分组。

SELECT INTERACTION_DATE - LAG(INTERACTION_DATE ) OVER (ORDER BY INTERACTION_DATE ) 

所以,我决定创建自己的自定义函数,然后创建一个自定义聚合函数来执行此操作,并在group by子句中使用此函数:

CREATE OR REPLACE FUNCTION DATE_INTERVAL(TIMESTAMP)  
     RETURNS TABLE (USER_INTERVALS INTERVAL) 
AS $$
  SELECT $1 - LAG($1) OVER (ORDER BY $1) 
$$
LANGUAGE SQL
IMMUTABLE;

但是这个函数只返回几行,其中一列具有空值。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您需要首先计算每行(和用户)的交互之间的差异,然后您可以计算平均值:

 prob = model.predict(net_in)[0]

    # Reshape to 2d here since the networks outputs a flat array per channel
    prob_edge = np.sqrt(prob.shape[0]).astype(np.int)
    prob = prob.reshape((prob_edge, prob_edge, 13))

    # Upsample
    if args.zoom > 1:
        prob = interp_map(prob, args.zoom, image_size[1], image_size[0])

    # Recover the most likely prediction (actual segment class)
    prediction = np.argmax(prob, axis=2)

    # Apply the color palette to the segmented image
    color_image = np.array(pascal_palette)[prediction.ravel()].reshape(
        prediction.shape + (3,))

    print('Saving results to: ', args.output_path)
    with open(args.output_path, 'wb') as out_file:
        Image.fromarray(np.multiply(color_image,255)).save(out_file)

答案 1 :(得分:0)

封装你的第一个查询,然后计算平均值:

chromeOptions.addArguments("window-size=1980,1080");