Tau*_*eef 5 sql sql-server sql-server-2012
大家好,这是我的第一个问题,所以对我很轻松 - 需要一些帮助来提取一些数据.
这是我正在使用的两个表:查询表:
+---------------------------------------------------------------------+
| ID (Primary Key) | Author | threadid | created | Comments |
+---------------------------------------------------------------------+
| 1 | C | 237 | 2016-07-24 | Hi there... |
| 2 | T | 421 | 2015-06-07 | Hello, .. |
| 3 | C | 421 | 2015-06-08 | Hi,... |
| 4 | C | 327 | 2017-03-13 | Hey there.. |
+---------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
T代表公司向客户发送询问,C代表客户向公司发送询问.
Enquirythreads表:
+----------------------------------+
| ID (Primary Key) | created |
+----------------------------------+
| 421 | 2016-07-24 |
| 237 | 2016-07-24 |
| 327 | 2015-06-08 |
+----------------------------------+
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
+---------+
| ID |
+---------+
| 421 |
+---------+
Run Code Online (Sandbox Code Playgroud)
我想要所有的enquirythread id,这样与之相关的第一个查询是由作者T完成的.
这是我的代码但不起作用:
SELECT enquirythreads.id
FROM enquirythreads
JOIN enquiries on enquirythreads.id = enquiries.threadid
WHERE enquiries.threadid IN
( SELECT enquiries.threadid as enqid
FROM
( SELECT enquiries.threadid, min(enquiries.created) as mincreated
FROM enquiries
WHERE enquiries.author = 'T'
GROUP BY enquiries.threadid ) x
)
Run Code Online (Sandbox Code Playgroud)
一种方法使用聚合和having:
select e.threadid
from enquiries e
group by e.threadid
having min(e.created) = min(case when e.author = 'T' then e.created end)
Run Code Online (Sandbox Code Playgroud)
这表示:“检查最早created日期是否与”的最早日期相同'T'。
另一种方法在子句中使用相关子查询where:
select et.threadid
from enquirythreads et
where (select e2.author
from enquiries e2
where e2.threadid = et.threadid
order by e2.created asc
fetch first 1 row only
) = 'T';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |