【问题标题】:Using default value for a date parameter in metabase在元数据库中使用日期参数的默认值
【发布时间】:2019-07-10 11:45:44
【问题描述】:

在元数据库中,我想要一个获取两个日期类型参数的查询,但如果未提供它们,则使用一些默认值。这是我用来实现但失败的 between 子句的示例。似乎当没有任何值作为参数传递时,查询中的变量设置了 null 以外的其他内容。

BETWEEN COALESCE(date({{start_date}}),subdate(current_date, interval 1 month))
AND COALESCE(date({{end_date}}),subdate(current_date, 1))

【问题讨论】:

  • @RaymondNijland 整个查询与我的问题无关。我的问题是在元数据库中使用 sql 参数的默认值。显示这条查询只是为了更好地了解我在问什么。我不是在寻找特定查询的解决方案。
  • 该链接旨在分享您的表格结构和表格数据以及预期结果,以便我们知道您在说什么。
  • @RaymondNijland 你是对的。但同样,我的问题与我的数据或任何类型的特定表格无关。也许我应该编辑它以更好地表达我的意思。

标签: mysql parameters default-value sqlparameter metabase


【解决方案1】:

我想出了如何解决这个问题。 首先,我用字段过滤器替换了整个 between 子句。然后我重写了元数据库生成的整个查询。由于某些奇怪的原因,我使用的 MariaDB 驱动程序无法运行由具有大量别名的元数据库生成的查询。 元数据库自动生成的查询:

SELECT count(*) AS `count`, `orders`.`city` AS `city`, `orders`.`status` AS `status`, `orders`.`transport_type` AS `transport_type`,
date(`orders`.`launched_at`) AS `launched_at`
FROM `orders`
WHERE (date(`orders`.`deleted_at`) IS NULL
   AND {{filter_date}}
GROUP BY `orders`.`city`, `orders`.`status`, `orders`.`transport_type`, date(`orders`.`launched_at`)
ORDER BY `orders`.`city` ASC, `orders`.`status` ASC, `orders`.`transport_type` ASC, date(`orders`.`launched_at`) ASC

然后可以将这个问题添加到仪表板中。在仪表板编辑模式中,过滤器小部件(或在此处输入日期)可用于过滤问题结果。让我烦恼的一件事是必须保存仪表板才能刷新卡中的数据。 这是我的最终查询:

select count(*), orders.city, orders.status, orders.transport_type, date(orders.launched_at)
from orders
where (date(orders.deleted_at)) is NULL
        AND {{filter_date}}
GROUP BY orders.city, orders.status, orders.transport_type, date(orders.launched_at)
ORDER BY orders.city, orders.status, orders.transport_type, date(orders.launched_at)

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 2018-12-20
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多