You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并同一数据库3张表并筛选近7天数据的SQL查询需求

问题描述

在名为Files的数据库中,存在RXInboundFileQueue、EligibilityInboundFileQueue、CostFileInboundFileQueue三张表,它们均包含OriginalName和FileCatalogedOn字段。需要编写SQL查询将这三张表合并为一个视图,展示近7天的文件记录。当前编写的代码仅能查询当日数据且未合并结果,需实现合并及7天时间范围筛选。

原代码如下:

DECLARE @DateFrom DateTime = (SELECT CAST(GetDate() as Date))
DECLARE @DateTo DateTime = (SELECT DATEADD(DAY, 1, @DateFrom))

SELECT
    OriginalName,  
    FileCatalogedOn
FROM RXInboundFileQueue
ORDER BY FileCatalogedOn DESC

DECLARE @DateFrom DateTime = (SELECT CAST(GetDate() as Date))
DECLARE @DateTo DateTime = (SELECT DATEADD(DAY, 1, @DateFrom))

SELECT
    OriginalName,
    FileCatalogedOn
FROM EligibilityInboundFileQueue
ORDER BY FileCatalogedOn DESC

DECLARE @DateFrom DateTime = (SELECT CAST(GetDate() as Date))
DECLARE @DateTo DateTime = (SELECT DATEADD(DAY, 1, @DateFrom))

SELECT
    OriginalName,
    FileCatalogedOn
FROM CostFileInboundFileQueue
ORDER BY FileCatalogedOn DESC
解决方案

无需使用外连接,用UNION ALL合并三张表的记录是最直接高效的方式(若需去重可替换为UNION,但UNION ALL性能更优),同时调整时间范围为近7天,最终可创建视图持久化查询逻辑。

1. 近7天数据合并查询语句

SELECT
    OriginalName,
    FileCatalogedOn,
    'RX' AS FileSource -- 可选:添加来源标识,区分记录所属表
FROM RXInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE) -- 若需包含当天数据,可改为 <= GETDATE()

UNION ALL

SELECT
    OriginalName,
    FileCatalogedOn,
    'Eligibility' AS FileSource
FROM EligibilityInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE)

UNION ALL

SELECT
    OriginalName,
    FileCatalogedOn,
    'Cost' AS FileSource
FROM CostFileInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE)

ORDER BY FileCatalogedOn DESC;

2. 创建视图

若需持久化该合并查询逻辑,执行以下语句:

USE Files; -- 切换至目标数据库
GO

CREATE VIEW Recent7DaysInboundFiles
AS
SELECT
    OriginalName,
    FileCatalogedOn,
    'RX' AS FileSource
FROM RXInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE)

UNION ALL

SELECT
    OriginalName,
    FileCatalogedOn,
    'Eligibility' AS FileSource
FROM EligibilityInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE)

UNION ALL

SELECT
    OriginalName,
    FileCatalogedOn,
    'Cost' AS FileSource
FROM CostFileInboundFileQueue
WHERE FileCatalogedOn >= DATEADD(DAY, -7, CAST(GETDATE() AS DATE))
AND FileCatalogedOn < CAST(GETDATE() AS DATE);
GO

关键说明

  • UNION ALL:直接合并三张表的符合条件记录,不做去重处理,性能优于UNION;若三张表存在完全重复的记录,可替换为UNION实现去重。
  • 时间范围:DATEADD(DAY, -7, CAST(GETDATE() AS DATE))获取7天前的零点,CAST(GETDATE() AS DATE)获取当天零点,筛选的是过去7天的完整日期数据;若需包含当天实时数据,将第二个条件改为FileCatalogedOn <= GETDATE()。
  • FileSource字段:可选添加,便于快速区分每条记录的来源表,利于后续问题排查。

内容的提问来源于stack exchange,提问作者Mistymanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:05:12