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

问题描述 投票:0回答:1

在配置数据库中,我希望有一个查询获取两个类型为date的参数,但如果未提供它们则使用一些默认值。这是我用来实现但失败的一个中间句子的例子。似乎没有值传递给参数时,除了null之外的其他东西被设置为查询中的变量。

BETWEEN COALESCE(date({{start_date}}),subdate(current_date, interval 1 month))
AND COALESCE(date({{end_date}}),subdate(current_date, 1))
mysql parameters default-value sqlparameters metabase
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.