首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择“如果存在于何处DATE=TODAY,如果不存在DATE=YESTERDAY”

选择“如果存在于何处DATE=TODAY,如果不存在DATE=YESTERDAY”
EN

Stack Overflow用户
提问于 2020-04-01 14:22:54
回答 3查看 872关注 0票数 1

例如,我有一个包含一些列的表和一个日期列(我用它创建了一个分区)。

代码语言:javascript
复制
[Amount, Date    ]  
[4     , 2020-4-1]  
[3     , 2020-4-2]  
[5     , 2020-4-4]  

我想根据日期得到最新的金额。

我想用ORDER BY做一个ORDER BY,但是,这是由BigQuery优化的,还是会扫描我的整个表?

我想尽可能地避免成本,我想要根据今天的日期做一个查询,如果没有找到昨天的搜索,但是我不知道如何在一个查询中完成它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-03 09:56:58

如果您的date字段是分区,则可以在WHERE子句中使用它来筛选查询中应该读取的分区。

在你的例子中,你可以这样做:

代码语言:javascript
复制
SELECT value
FROM <your-table>
WHERE Date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
ORDER BY Data DESC
LIMIT 1

这个查询基本上会:

  1. 只过滤今天和昨天的分区
  2. 按日期字段排序行,从最近的到旧的
  3. 选择有序列表的第一个元素

如果表中有带有今天日期的行,则查询将返回今天的数据。如果没有,查询将返回昨天的数据。

最后,我想在这里附加这个关于查询分区表的参考文献

我希望它能帮上忙

票数 1
EN

Stack Overflow用户

发布于 2020-04-01 14:37:52

下面是用于BigQuery标准SQL的

代码语言:javascript
复制
#standardSQL
SELECT ARRAY_AGG(amount ORDER BY `date` DESC LIMIT 1)[SAFE_OFFSET(0)]
FROM `project.dataset.table`
WHERE `date` >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)  

注意:上面假设您的date字段是日期数据类型。

票数 3
EN

Stack Overflow用户

发布于 2020-04-01 14:37:46

限制顺序停止查询,得到所指示的结果数量。我认为查询应该是这样的,我不确定“今天()-1”是否返回

代码语言:javascript
复制
SELECT Amount
FROM <table> as t
WHERE date(t.Date) = current_date()
OR date(t.Date) = makedate(year(current_date()), dayofyear(current_date())-1);

编辑:对不起,我的答案是关于MariaDB,我现在看到你问我甚至不知道的Google,但它看起来像SQL,我希望它有一些像我发布的函数。

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

https://stackoverflow.com/questions/60973141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档