【问题标题】:SnowFlake Query if an Id exists on each of the last 7 daysSnowFlake 查询过去 7 天是否存在 Id
【发布时间】:2020-03-22 14:36:08
【问题描述】:

我们每天都会将新记录插入到具有say id 和 created_on 列的表中。

如何确定过去 7 天内是否每天都存在具有特定标识符的记录?

【问题讨论】:

    标签: sql snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    这可以通过存储过程来完成:

    CREATE OR REPLACE PROCEDURE TIME_TRAVEL(QUERY TEXT, DAYS FLOAT)
    RETURNS VARIANT LANGUAGE JAVASCRIPT AS
    $$
      function run_query(query, offset) {
        try {
          var sqlText = query.replace('"at"', " AT(OFFSET => " + (offset + 0) + ") ");
          return (snowflake.execute({sqlText: sqlText})).next();
        }
        catch(e) { return false }
      }
      var days, result = [];
      for (days = 0; days < DAYS; days++)
        if (run_query(QUERY, -days * 86400)) result.push(days);
      return result;
    $$;
    
    CALL TIME_TRAVEL('SELECT * FROM TASK_HISTORY "at" WHERE QUERY_ID = ''019024ef-002e-8f71-0000-05e10030a782''', 7);
    

    要使时间旅行查询替换工作,请输入 "at" 作为表别名。
    当查询返回任何值时,返回值是一个天偏移量数组。
    如果您有 Snowflake 企业版,这将仅适用于 DAYS=2 之外。

    【讨论】:

      【解决方案2】:

      我用下面的查询做到了

      select id,  sum(present) as total_count 
      from
          (select id,feed_date, count(1) as present 
          from catalog_rca 
          where feed_date between '2019-11-19' and '2019-11-25'  
          group by 1,2) as temp
      group by 1 having total_count = 7;
      

      【讨论】:

        猜你喜欢
        • 2020-03-26
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多