无法从表中获取正确的日期

时间:2016-04-17 00:24:47

标签: sql date google-bigquery

我目前有此查询的日期范围设置为2月24日。不幸的是,我的结果有来自各地的日期。

为什么会发生这种情况的方向?

P.S。 " TIMESTAMP"是我的专栏名称(我无法改变这一点)。

SELECT
  DATE(TIMESTAMP) as dateofEvent,
  eventType,
  parameters.name,
  parameters.value,
  membershipStatus,
  gender,
  COUNT(*)
FROM (
  SELECT
    *
  FROM
    TABLE_DATE_RANGE(myFirstTable, TIMESTAMP('2016-02-24 00:00:00'), TIMESTAMP('2016-02-24 23:59:59'))) AS EV
JOIN
  mySecondTable AS UD
ON
  UD.userId = EV.userId
WHERE
  eventType = 'SettingUpdated'
 and (UPPER(parameters.value) = 'TRUE' or UPPER(parameters.value) = 'FALSE')

GROUP BY
  dateofEvent,
  eventType,
  gender,
  parameters.value,
  parameters.name,
  membershipStatus

2 个答案:

答案 0 :(得分:1)

TABLE_DATE_RANGE过滤表名,它对字段值没有任何作用。

因此,如果您只想获取特定时间范围内的字段,则必须确保字段值与表名相对应。在特定情况下,您需要确保仅在“2016-02-24 00:00:00”之间添加TIMESTAMP字段的行。和' 2016-02-24 23:59:59'到表myFirstTable.20160224。您可能违反此规定,表myFirstTable.20160224包含TIMESTAMP个字段。

答案 1 :(得分:1)

使用以下查询时

SELECT *
FROM TABLE_DATE_RANGE(myFirstTable, 
         TIMESTAMP('2016-02-24 00:00:00'), 
         TIMESTAMP('2016-02-24 23:59:59'))) AS EV

FROM语句正在“翻译”,您的查询就像下面一样执行(请参阅Table wildcard functions中的更多内容)

SELECT *
FROM myFirstTable20160224   

所以,现在你在这个地方得到日期的事实告诉我你的时间戳字段不仅限于2016-02-24,而是尽管表格名称已经遍布整个地方

如果您需要按日期过滤输出,可以添加类似

的内容
WHERE DATE(timestamp) = '2016-02-24'