2015-10-16 109 views
0

我被困在查询中。我在寻找自己的笔记中的一个客户的评论,但我需要它之前返回说明,其中包括,它与此查询发现那些后:多行之前和之后的Mysql

SELECT ct.whn, ct.tpe, ct.drctn, ct.smmry, ct.dscrptn, ct.zxcrtdby, 
(SELECT nme FROM sdcrdtr WHERE sdcrdtr.id = ct.crdtr) as 'Creditor Name', 
(SELECT accntrfrnce FROM cddbt WHERE cddbt.id = ct.dbt) as Reference 

FROM cdcntct ct, cdcse c 

WHERE c.id = ct.cse AND c.rfrnce = '123456789' 
AND ct.smmry LIKE '%review%' 

我已经看到了这里,但类似的问题它用于从表中提供特定ID或类似信息的所有行。

我无法找到从哪里开始!

在此先感谢。 请问

编辑:采样日期

ID WhN   SMMRY   DSCRPTN 
12 01/05/2015 Sent Paperwork Info Received 
13 01/05/2014 Reviewed   Some Info Received 
14 28/04/2014 Spoke to Client Said hello 
15 01/05/2013 Note 15   Blank 
16 01/05/2012 Note 16   Blank 
17 01/05/2011 Review done  Blank 
18 30/12/2010 Another note  Blank 

所以,如果我跑我的查询但对于前行的要求,包括后,它将返回ID的12,13,14和16,然后,17,18。而目前它只返回ID 13和17,因为我不知道该条款的添加内容。

+1

请提供模式和样本数据。 – RedFilter

+0

我已经添加了一些示例数据,我不确定您提供模式的含义,对不起。这是一个MySQL数据库。 – Will

+0

如果您喜欢,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的CREATE和INSERT语句(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry

回答

0

你可以做这样的事情:

select t2.* 
from MyTable t2 
inner join (
    select t.ID, max(tb.ID) as ID_Before, min(ta.ID) as ID_After 
    from MyTable t 
    left join MyTable tb on tb.ID < t.ID 
    left join MyTable ta on ta.ID > t.ID 
    where t.SMMRY like '%review%' 
    group by t.ID 
) a on t2.ID in (a.ID, a.ID_Before, a.ID_After) 

SQL Fiddle

| ID |  WhN |   SMMRY |   DSCRPTN | 
|----|------------|-----------------|--------------------| 
| 12 | 01/05/2015 | Sent Paperwork |  Info Received | 
| 13 | 01/05/2014 |  Reviewed | Some Info Received | 
| 14 | 28/04/2014 | Spoke to Client |   Said hello | 
| 16 | 01/05/2012 |   Note 16 |    Blank | 
| 17 | 01/05/2011 |  Review done |    Blank | 
| 18 | 30/12/2010 | Another note |    Blank |