Datetime 仅选择最早日期(BigQuery)

Datetime 仅选择最早日期(BigQuery),datetime,google-bigquery,Datetime,Google Bigquery,我只想选择最早的日期。使用Max/Min不起作用,因为它是行级别的,我无法找到使用over或NTH的方法,因为此查询每天都将使用不同数量的服务器(w_id和z_id)运行 以下查询: select server, w_id, z_id, date(datetime) as day from( SELECT server, w_id, datetime, demand.b_id as id, demand.c_type, z_id, FROM TABLE_DATE_RANGE(v3_dat

我只想选择最早的日期。使用Max/Min不起作用,因为它是行级别的,我无法找到使用over或NTH的方法,因为此查询每天都将使用不同数量的服务器(w_id和z_id)运行

以下查询:

select server, w_id, z_id, date(datetime) as day
from( SELECT server, w_id, datetime, demand.b_id as id, demand.c_type, z_id,
    FROM TABLE_DATE_RANGE(v3_data.v3_,DATE_ADD(CURRENT_DATE(),-2,"day"),
           DATE_ADD(CURRENT_DATE(),-1,"day"))
    where demand.b_id is not null and  demand.c_type = 'rtb'
    group by 1,2,3,4,5,6
    having datetime >=  DATE_ADD(CURRENT_DATE(),-2,"day")
)
group by 1,2,3,4
having count(day)<2
order by z_id, day

因此,从上面看,我只想要2016-04-18。

最内在的选择是你的原版 剩下的就是照顾min_day了 没有经过测试-就像在进行中一样-但至少应该给你一个想法

SELECT server, w_id, z_id, [day]
FROM (
  SELECT server, w_id, z_id, [day], MIN([day]) OVER() AS min_day               
  FROM (                                                  
    SELECT server, w_id, z_id, DATE(datetime) AS [day]
    FROM ( 
      SELECT server, w_id, datetime, demand.b_id AS id, demand.c_type, z_id,
      FROM TABLE_DATE_RANGE(v3_data.v3_,DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))
      WHERE demand.b_id IS NOT NULL AND demand.c_type = 'rtb'
      GROUP BY 1,2,3,4,5,6
      HAVING datetime >= DATE_ADD(CURRENT_DATE(),-2,"day") 
    )
    GROUP BY 1,2,3,4
    HAVING COUNT([day])<2
  )                                                       
)                                                       
WHERE [day] = min_day                                     
ORDER BY z_id, [day]

最内在的选择是你的原作 剩下的就是照顾min_day了 没有经过测试-就像在进行中一样-但至少应该给你一个想法

SELECT server, w_id, z_id, [day]
FROM (
  SELECT server, w_id, z_id, [day], MIN([day]) OVER() AS min_day               
  FROM (                                                  
    SELECT server, w_id, z_id, DATE(datetime) AS [day]
    FROM ( 
      SELECT server, w_id, datetime, demand.b_id AS id, demand.c_type, z_id,
      FROM TABLE_DATE_RANGE(v3_data.v3_,DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))
      WHERE demand.b_id IS NOT NULL AND demand.c_type = 'rtb'
      GROUP BY 1,2,3,4,5,6
      HAVING datetime >= DATE_ADD(CURRENT_DATE(),-2,"day") 
    )
    GROUP BY 1,2,3,4
    HAVING COUNT([day])<2
  )                                                       
)                                                       
WHERE [day] = min_day                                     
ORDER BY z_id, [day]

我认为一个团队可以很简单地在这里完成工作:

SELECT
  server,
  w_id,
  z_id,
  day,
FROM (
  SELECT
    server,
    w_id,
    z_id,
    GROUP_CONCAT(day) day,
  FROM (
    SELECT
      server,
      w_id,
      DATE(datetime) day,
      demand.b_id AS id,
      demand.c_type,
      z_id,
    FROM
      TABLE_DATE_RANGE(v3_data.v3_,DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))
    WHERE
      demand.b_id IS NOT NULL
      AND demand.c_type = 'rtb'
      AND DATE(datetime) >= DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))
    GROUP BY
      1,2,3,4,5,6
    ORDER BY
      day) # Critical to order this dimension to make the GROUP_CONCAT permutations unique
  GROUP BY
    server,
    w_id,
    z_id,
    # day is aggregated in GROUP_CONCAT and so it does not get included in the GROUP BY
    )
WHERE
  day = DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))

我认为一个团队可以很简单地在这里完成工作:

SELECT
  server,
  w_id,
  z_id,
  day,
FROM (
  SELECT
    server,
    w_id,
    z_id,
    GROUP_CONCAT(day) day,
  FROM (
    SELECT
      server,
      w_id,
      DATE(datetime) day,
      demand.b_id AS id,
      demand.c_type,
      z_id,
    FROM
      TABLE_DATE_RANGE(v3_data.v3_,DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))
    WHERE
      demand.b_id IS NOT NULL
      AND demand.c_type = 'rtb'
      AND DATE(datetime) >= DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))
    GROUP BY
      1,2,3,4,5,6
    ORDER BY
      day) # Critical to order this dimension to make the GROUP_CONCAT permutations unique
  GROUP BY
    server,
    w_id,
    z_id,
    # day is aggregated in GROUP_CONCAT and so it does not get included in the GROUP BY
    )
WHERE
  day = DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))

这两种解决方案都很有帮助,但我认为两者都没有达到我想要的效果,以下几点确实起到了作用:

select server, w_id, id, demand.c_type,z_id,

NTH(1, day) First, NTH(2, day) Second, 

from(

SELECT
      server,
      w_id,
      DATE(datetime) as day,
      demand.b_id AS id,
      demand.c_type,
      z_id,

FROM
      TABLE_DATE_RANGE([black-beach-789:v3_data.v3_],DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))

WHERE
      demand.b_id IS NOT NULL

AND demand.c_type = 'rtb'

AND DATE(datetime) >= DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))

GROUP BY
      1,2,3,4,5,6

order by day
      )

group by 1,2,3,4,5

having first = date(DATE_ADD(CURRENT_DATE(),-2,"day")) and Second is null

这两种解决方案都很有帮助,但我认为两者都没有达到我想要的效果,以下几点确实起到了作用:

select server, w_id, id, demand.c_type,z_id,

NTH(1, day) First, NTH(2, day) Second, 

from(

SELECT
      server,
      w_id,
      DATE(datetime) as day,
      demand.b_id AS id,
      demand.c_type,
      z_id,

FROM
      TABLE_DATE_RANGE([black-beach-789:v3_data.v3_],DATE_ADD(CURRENT_DATE(),-2,"day"), DATE_ADD(CURRENT_DATE(),-1,"day"))

WHERE
      demand.b_id IS NOT NULL

AND demand.c_type = 'rtb'

AND DATE(datetime) >= DATE(DATE_ADD(CURRENT_DATE(),-2,"day"))

GROUP BY
      1,2,3,4,5,6

order by day
      )

group by 1,2,3,4,5

having first = date(DATE_ADD(CURRENT_DATE(),-2,"day")) and Second is null

我认为我所做的编辑有效,你的没有,但是它对我未来的窗口功能有帮助。我认为我所做的编辑有效,你的没有,但是它对我未来的窗口功能有帮助。它不起作用,但是谢谢你,因为小组会议将在未来派上用场。我相信我的编辑工作正常,而且很简单。删除demand.b_id使您的查询与我编辑中的查询匹配。我只想看看z_id何时停止参与rtb,b_id最终并不是必需的。假设每个z_id都有多个b_id,会导致误报/误报,并将查询搞砸。这不起作用,但谢谢,因为group_concat将来会派上用场。我相信我的编辑工作正常,而且很简单。删除demand.b_id使您的查询与我编辑中的查询匹配。我只想看看z_id何时停止参与rtb,b_id最终并不是必需的。假设每个z_id都有多个b_id,则会出现误报/误报,并将查询搞砸。