SQL选择每个Table1_ID,其中Table2.column'x'出现在'Y'之后?

时间:2016-05-17 20:02:15

标签: sql ms-access

我对SQL很陌生并且无法堆叠选择参数。  选择table2.eventtype在'AssignedTo'之后(而不是直接之后)发生'AcqOpened'的每个StudyNumber。

 SELECT *
   FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.Table1_ID
   WHERE Table2.eventtype ='AcqOpened' IN
        (
        SELECT Table1.ID
        FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.Table1_ID
        WHERE Table2.eventtype > 'AssignedTo' ORDER BY Table1.ID, Table2.timestamp
        );

我一直在将这些变化放入Access并获得部分结果和大量错误。 (我从here获得了“>”)的想法:

以下是两个Table1条目及其对应的Table2条目的示例集。对于此设置,所需的输出将是4387(或00600138-A5BS13245-AT.xml。),因为4387在AssignedTo之后有一个AcqOpened。 (4386不)。

  Table1
ID      StudyNumber
---     ------------   
4386    00600137-A5BS13245-AT.xml
4387    00600138-A5BS13245-AT.xml


  Table2
ID      Lookup_Studynumber(T1_ID)   eventtype       p1  p2  user    timestamp
--      -------------------------   -------------   --  --  -----   --------------------
27524   00600137-A5BS13245-AT.xml   AcqOpened               user    7/11/2014 8:28:35 AM
27525   00600137-A5BS13245-AT.xml   AcqModified             user    7/11/2014 8:30:40 AM
27526   00600137-A5BS13245-AT.xml   *AssignedTo*        -   user    7/11/2014 9:22:31 AM
27527   00600137-A5BS13245-AT.xml   AcqStateChange  -   -   user    7/11/2014 9:22:31 AM

27528   00600138-A5BS13245-AT.xml   AcqOpened               user    7/14/2014 8:13:10 AM
27529   00600138-A5BS13245-AT.xml   AcqModified             user    7/14/2014 8:16:34 AM
27530   00600138-A5BS13245-AT.xml   *AssignedTo*        -   user    7/14/2014 10:26:40 AM
27531   00600138-A5BS13245-AT.xml   AcqStateChange  -   -   user    7/14/2014 10:26:40 AM
27532   00600138-A5BS13245-AT.xml   **AcqOpened**           user    7/18/2014 2:41:19 PM
27533   00600138-A5BS13245-AT.xml   AcqModified             user    7/18/2014 2:41:21 PM
27534   00600138-A5BS13245-AT.xml   AcqStateChange  -   -   user    7/18/2014 3:01:22 PM
27535   00600138-A5BS13245-AT.xml   AcqStateChange  -   -   user    12/19/2014 12:06:44 PM

如果对数据集进行了任何操作,那么每个StudyNumber记录的审计时间会有所帮助。 eventtype是采取了什么行动。我们的想法是找到哪些Table1 Id(或StudyNumbers)正在进行第二次审核 当我将它们导入Access时,建议我将其分成两个表。 非常感谢你看看!!

1 个答案:

答案 0 :(得分:0)

应用自联接查询以根据所需逻辑从table2中提取信息,然后将表1与先前子查询的结果连接。

select n.ID, n.StudyNumber 
from table1 n 
inner join
( select a.ID, a.[Lookup_Studynumber(T1_ID)] 
 from Table2 a 
 inner join Table2 b
 on a.[Lookup_Studynumber(T1_ID)]=b.[Lookup_Studynumber(T1_ID)] 
 and a.timestamp > b.timestamp --or apply appropriate logic
 where a.eventtype =  'AcqOpened'
 and b.eventtype = 'AssignedTo' ) s
 on n.Studynumber=s.[Lookup_Studynumber(T1_ID)]
 group by n.ID,n.StudyNumber