【问题标题】:Access/ SQL query for movements when only one date per condition每个条件只有一个日期时的访问/ SQL 查询
【发布时间】:2015-01-28 20:25:29
【问题描述】:

我正在尝试通过 SQL 或 Access 进行查询以跟踪患者的运动,但真的很吃力。我面临的问题是每个患者每天只有一个位置,但患者可以在病房之间返回,因此尝试使用患者/位置以及最大和最小日期是不够的。

例子:

 - RowID: 1 Patient A - Ward 10 - 01/01/2015  
 - RowID: 2 Patient A - Ward 10 - 02/01/2015
 - RowID: 3 Patient A - Ward 11 - 03/01/2015  
 - RowID: 4 Patient A - Ward 10 - 04/01/2015
 - RowID: 5 Patient B - Ward 11 - 01/01/2015

如您所见,该位置仅被捕获,每天一次,但我想开发一个动作,如果grouped by patient and ward 使用我的max date 将给出 2015 年 4 月 1 日第 10 区的最后日期,这在技术上是正确的,但我想捕捉 2015 年 2 月 1 日的运动。例如,我希望能够显示以下内容:

 - Patient A - Ward 10 01/01/2015 - 02/01/2015
 - Patient A - Ward 11 03/01/2015 - 03/01/2015
 - Patient A - Ward 10 04/01/2015 -
 - Patient B - Ward 11 01/01/2015 - 

任何帮助将不胜感激

亲切的问候, 锡

【问题讨论】:

  • 澄清一下,当您说“SQL”时,您的意思是 Microsoft SQL Server,对吗?

标签: sql ms-access ms-access-2007


【解决方案1】:

您需要使用相同的表设置Self Join 并使用条件对齐行,以便它们彼此相邻排列

设置:

SELECT * INTO #TABLE FROM 
(
SELECT 1 ROWID, 'Patient A' PAT , 'Ward 10' loc ,'01/01/2015' recorddate UNION ALL
select 2 ROWID, 'Patient A' PAT , 'Ward 10' loc ,'02/01/2015' recorddate UNION ALL
select 3 ROWID, 'Patient A' PAT , 'Ward 11' loc ,'03/01/2015' recorddate  UNION ALL
select 4 ROWID, 'Patient A' PAT , 'Ward 10' loc ,'04/01/2015' recorddate UNION ALL
select 5 ROWID, 'Patient B' PAT , 'Ward 11' loc ,'01/01/2015' recorddate) A

查询:

SELECT 
A.pat, A.loc, a.recorddate, MIN(b.recorddate) 
FROM #table A
INNER JOIN #TABLE B
ON A.PAT=B.pat
and (A.recorddate<B.recorddate)
group by A.ROWID, A.pat, A.loc, a.recorddate

UNION ALL 
-- Get the row that donot have a To Date

SELECT A.PAT, LOC , A.recorddate, NULL
FROM #table A
INNER JOIN (SELECT 
B.pat, MAX(B.recorddate) recorddate
FROM #table B
GROUP BY B.PAT) B
on A.PAT=B.PAT
and A.recorddate=B.recorddate

结果:

pat         loc     FROMDATE    TODATE
Patient A   Ward 10 01/01/2015  02/01/2015
Patient A   Ward 10 02/01/2015  03/01/2015
Patient A   Ward 11 03/01/2015  04/01/2015
Patient B   Ward 11 01/01/2015  NULL
Patient A   Ward 10 04/01/2015  NULL

【讨论】:

  • 您好,谢谢您,但是,它完全按照您的描述工作,但是(我怀疑问题出在我的描述中)我不希望每个日期都有一行。例如,患者 A 于 2015 年 1 月 1 日、2015 年 2 月 1 日、2015 年 3 月 1 日、2015 年 4 月 1 日在 10 号病房,然后于 2015 年 5 月 1 日和 2015 年 6 月 1 日在 11 号病房然后在 2015 年 7 月 1 日回到 10 号病房...我希望我的结果显示这些分组,即患者 A,病房 10 从 01/01/2015 - 04/01/2015,患者 A,病房 11 从 05 /01/2015 - 06/01/2015 然后患者 A,病房 10 从 07/01/2015。希望这是有道理的?
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2018-02-13
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多