在配置数据库中为日期参数使用默认值

时间:2019-02-16 15:09:24

标签: mysql parameters default-value sqlparameters metabase

在配置数据库中,我想查询一个获取日期类型为两个参数的查询,但如果未提供,则使用一些默认值。这是我用来实现此目的但失败的ween子句的示例。似乎没有值作为参数传递时,在查询中将变量设置为null以外的值。

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

1 个答案:

答案 0 :(得分:0)

我想出了解决方法。 首先,我用字段过滤器替换了整个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)