我目前必须为工作中的一次性报告流程运行如下查询。
但是,对于表中的每个项目,都保存了多个关联的“消息”,这意味着每个项目都会被多次返回。根据下面的示例和进一步的解释,我只想将每个项目显示一次。
我意识到这是(至少在我看来)一个糟糕的结构,但需要完成报告,这就是数据的存储方式:-(
SQL小提琴: http ://sqlfiddle.com/#!6/76fce/8
询问:
SELECT messageId, receiver, createdDate, itemId from messages_0,items WHERE
itemId IN (1, 2, 3)
AND (receiver = '100' OR receiver = '200')
AND messages_0.description LIKE '%'+items.name+'%'
union all
SELECT messageId, receiver, createdDate, itemId from messages_1,items WHERE
itemId IN (1, 2, 3)
AND (receiver = '100' OR receiver = '200')
AND messages_1.description LIKE '%'+items.name+'%'
注意:有两个消息表,因此联合所有
示例消息:
messageId | receiver | createdDate | description
--------------
1 | 100 | 2012/11/27 12:00 | The Dog is awesome
2 | 100 | 2012/11/27 13:00 | Now the Dog is boring
4 | 200 | 2012/11/27 11:30 | I have Wood :-)
示例项目:
itemID | name
--------------
1 | Dave
2 | Dog
3 | Wood
结果:
messageId | receiver | createdDate | itemId
1 | 100 | 2012/11/27 12:00 | 2
2 | 100 | 2012/11/27 13:00 | 2
4 | 200 | 2012/11/27 11:00 | 3
但是,我只需要显示每个项目一次。仅显示最旧的行(按 createdDate)。
目标结果:
messageId | receiver | createdDate | itemId
1 | 100 | 2012/11/27 12:00 | 2
4 | 200 | 2012/11/27 11:00 | 3
如何在 SQL (Sybase) 中执行此操作?到目前为止,我一直在查看 group by(它只会返回一个 id)和某种子查询,但一直无法让任何工作!