【问题标题】:SQL Server, Efficient way to query multiple tables for a specific day of dataSQL Server,查询多个表以获取特定日期数据的有效方法
【发布时间】:2020-04-09 18:25:49
【问题描述】:

我们已经开始为一堆表格保存每日变化数据。我们首先将所有原始数据和更改数据放入每个表记录的开始和结束日期(因此并非所有记录每天都保存只是更改的记录)。因此,要提取特定日期的数据,我必须查看开始日期和结束日期(结束日期可能为空)并提取 MAX 开始日期以获取正确的记录。

SELECT *
FROM dbo.DIM_EX_NAME_MASTER AS DEXNM
    INNER JOIN 
     (SELECT APPID, MAX(DW_RECORD_START) AS StartDate
      FROM dbo.DIM_EX_NAME_MASTER
      WHERE (DW_RECORD_START < '4/4/2020') AND (DW_RECORD_END > '4/4/2020') 
        OR (DW_RECORD_START < '4/4/2020') AND (DW_RECORD_END IS NULL)
      GROUP BY APPID) AS INNER_DEXNM ON DEXNM.APPID = INNER_DEXNM.APPID AND DEXNM.DW_RECORD_START = INNER_DEXNM.StartDate

所以这对于一个表来说还不错,但我们希望构建一个带有查询的报告,该查询从 25 个表中提取,其中包含用户选择要提取的日期的子查询。

这将是一些非常混乱的 sql。理想情况下,我想为每个表创建一个视图并将日期作为参数传递,但 SQL Server 不允许参数化视图。

任何人对如何在不为每个表添加所有这些额外 sql 的情况下构建基于多表日期的查询有任何想法?

感谢您提供的任何帮助!

【问题讨论】:

  • 它应该更详细,因为它们分为 25 个表.. 这样做是出于什么原因,我们还必须考虑到它们处理的信息量

标签: sql sql-server


【解决方案1】:

SQL 服务器不允许参数化视图。

不,但 SQL Server 确实支持user-defined table-valued functions

这几乎正是您所要求的——他们可以接受日期参数并将结果作为表格返回。

【讨论】:

  • 所以我对此进行了研究,但我没有看到一种方法可以以一种不那么麻烦的方式链接这 25 个所需的用户定义函数。我没有 CROSS APPLY 的经验。你用过吗,你推荐我学那个方法吗?
  • 我已经使用 INNER JOIN 玩了一点(虽然我看过的文章使用了 CROSS APPLY),它似乎就像我想要的那样工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多