【问题标题】:How to query data matching ID and Date from another list of IDs and Dates in SQL Server?如何从 SQL Server 中的另一个 ID 和日期列表中查询匹配 ID 和日期的数据?
【发布时间】:2019-03-21 20:29:40
【问题描述】:

我有一个包含患者数据的表格。该表有Patient IDAdmissionDate 等。同一患者可能有多个AdmissionDate。我只对入院日期在选定日期内的选定患者感兴趣。例如:下表

patient_id | admission_date
-----------+---------------
F001         2018-07-13
F002         2017-04-02
F003         2018-07-13
F004         2018-04-05
F005         2015-06-13
F001         2017-04-02
F002         2018-07-13
F001         2018-04-22

在上表中,F001 有 3 个录取:2018-07-13, 2017-04-02, 2018-04-22F002 有 2 个:2017-04-02, 2018-07-13

现在,我有一个 ID 电子表格,他们的入学日期在下一列。我分别获取了 ID 和日期,并将其添加到以下查询中

WITH TableA AS
(
    SELECT 
        CONVERT(date, admission_date) as admit_date, *
    FROM 
        AdmissionTable
    WHERE 
        patient_id IN ('F001', 'F002', 'F003', 'F004', 'F005') 
)
SELECT *
FROM TableA
WHERE admit_date IN ('2018-07-13', '2017-04-02', '2018-07-13','2018-04-05,'2015-06-13','2017-04-02','2018-07-13','2018-04-22')

这将返回我正在寻找的结果,但也比我正在寻找的结果更多。它甚至为我提供了入院日期也在我正在搜索的日期列表中的患者的行,而不是电子表格中列出的那些。该查询本质上为我提供了同一患者的多个数据,而不仅仅是我需要的日期所在的行。

我该如何解决这个问题?处理它的最佳方法是什么?

想要的结果应该如下所示:

patient_id | admission_date
-----------+---------------
F001         2018-04-22
F002         2018-07-13
F003         2018-07-13
F004         2018-04-05
F005         2015-06-13

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我认为您应该像这样构造查询:

    with from_spreadsheet as (
          select v.*
          from (values ('F001', '2018-07-13'), ('F002', '2017-04-02'), . . .
               ) v(patient_id, admission_date)
         )
    select a.*
    from admissiontable a join
         from_spreadsheet fs
         on fs.patient_id = a.patient_id and
            convert(date, fs.admission_date) = a.admission_date;
    

    【讨论】:

    • 好的,我试试看。似乎合乎逻辑。谢谢
    • 它返回此错误 - Msg 102, Level 15, State 1, Line 3 Incorrect syntax near 'F001'.,我还必须在 select 之后删除 v.
    • 啊!!知道了!!你在from_spreadsheet 中的FROM( 之后忘记了VALUES。它返回了结果。我正在验证结果是否是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多