【问题标题】:group by date part of datetime and get number of records for each按日期时间的日期部分分组并获取每个记录的数量
【发布时间】:2016-10-17 17:30:18
【问题描述】:

到目前为止我有这个:

select created_at,
DATEDIFF(TO_DATE(current_date()), TO_DATE(sales_flat_order.created_at)) as delay,
count(*) over() as NumberOfOrders 
FROM
magentodb.sales_flat_order 
WHERE
status IN ( 'packed' , 'cod_confirmed' )
GROUP BY TO_DATE(created_at)

但这不起作用。

  1. 语法错误:

    编译语句时出错:FAILED: SemanticException [Error 10004]: Line 1:7 Invalid table alias or column reference 'created_at': (可能的列名是: (tok_function to_date (tok_table_or_col created_at)))

  2. count(*) does not give sum for each grouped by date but instead all of the rows.

注意:我实际上使用的是 hive,但它在查询方面与 sql 完全一样

【问题讨论】:

  • 为什么你使用 over() 和 count(*) ??
  • 不应该吗?由于我们需要计算为一个键分组的行,我认为它会这样工作
  • 我没有得到 over() 的目的;如果您删除它,您的查询将正常工作。

标签: hive


【解决方案1】:

试试这个:

select created_at,
DATEDIFF(TO_DATE(current_date()), TO_DATE(sales_flat_order.created_at)) as delay,
count(*) as NumberOfOrders 
FROM
magentodb.sales_flat_order 
WHERE
status IN ( 'packed' , 'cod_confirmed' )
GROUP BY Date(created_at)

【讨论】:

    【解决方案2】:

    我认为您想使用created_at 的日期部分(包括年、月和日)进行分组。

    select
    date(created_at) as created_at_day,
    datediff(curdate(), sales_flat_order.created_at) as delay,
    count(*) as numberOfOrders
    from magentodb.sales_flat_order
    WHERE status IN ('packed', 'cod_confirmed' ) GROUP BY created_at_day
    

    此查询将仅显示当天创建的第一个订单。因为你是按天分组的。您可以使用average 查找当天创建的订单的平均延迟。

    【讨论】:

      【解决方案3】:

      我的手机不允许我发布 cmets。但试试这个链接它可能会引导你正确的方式。

      stackoverflow.com/questions/29704904/invalid-table-alias-or-column-reference-b

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        相关资源
        最近更新 更多