我无法提出执行以下操作的正确查询:假设我们以某种方式从用户那里获取两列的值,datestamp
并且brand
(发生的情况是Looker UI 将其提供给查询)。为简单起见,假设我们的架构包含两列,我只想将它们取回,所以:
SELECT brand, datestamp
FROM my_table
WHERE
我不知道我应该怎么写剩下的。这是所需的:
用户可以键入
yesterday
,today
,或类似的字符串,last x days
然后将正确的日期传递给查询。x
20181001
用户能够指定
brand
应该等于什么并将其传递给查询。( CASE WHEN position(' TO ' IN UPPER({% parameter filter_datestamp %})) > 0 THEN datestamp >= SUBSTR({% parameter filter_datestamp %}, 0, strpos(UPPER({% parameter filter_datestamp %}), ' TO ') - 1) AND datestamp <= SUBSTR({% parameter filter_datestamp %}, strpos(UPPER({% parameter filter_datestamp %}), ' TO ') + 4) AND brand LIKE {% parameter filter_brand %} WHEN filter_datestamp = 'today' THEN datestamp = date_format(CURRENT_DATE,'yyyyMMdd') AND brand LIKE {% parameter filter_brand %} WHEN datestamp = 'yesterday' THEN datestamp = date_format(DATE_ADD('day', -1, CURRENT_DATE),'%Y%m%d') AND brand LIKE {% parameter filter_brand %} WHEN datestamp LIKE 'last % days' THEN datestamp >= date_format(DATE_ADD('day', -CAST(split({% parameter filter_datestamp %}, ' ')[2] AS INT), CURRENT_DATE),'%Y%m%d') AND brand LIKE {% parameter filter_brand %} ELSE datestamp LIKE {% parameter filter_datestamp %} AND brand LIKE {% parameter filter_brand %} END )
如果查询有效,则结果应该是具有brand
并datestamp
等于用户想要的行数。所有行都是相同的(我实际上想要别的东西,但如果CASE
解决了我想我可以这样做)。
请为我写下完整的查询。在这种情况下,我不确定, ,和其他关键字的去向WHERE
。CASE
WHEN
AND