繁体   English   中英

SQL查询以在日期之间联接表

[英]SQL Query to Join tables between dates

我有一个MySQL数据库,该数据库记录有两个表的寻呼机消息,一个是带有消息的表,另一个是带有收件人的表,其中表之间的链接是pagermessages.pcapcode = capcodes.bcapcode(每个寻呼机消息的数字地址)发送到)。

这是半成功的,我通常使用内部联接或左联接来显示各种寻呼机消息以及这些消息是针对谁的。

我的问题是系统是动态的,并且可以对寻呼机进行重新编程,以便最终可能将收件人1的地址1更改为示例2的地址。

这导致了一个问题,我想以历史形式存储消息,但是我需要一种能够在日期范围之间指定的方法。 我的想法是在Capcodes表中有一个日期和时间(bStartDateTime)和一个完成日期和时间(bFinishDateTime),然后在我的查询中可以使用它来确定如何加入寻呼机消息。

虽然这是我遇到的问题,但通常我会在PagerMessages INNER JOIN Capcodes ON PagerMessages.pCapcode = Capcodes.bCapcode上执行类似SELECT *的操作,但是我现在想做的是做相同的事情,但是在寻呼机上消息日期(pDateTime)在bStartDateTime和bFinishDateTime(可以为空白)之间进行链接,但是如果超出该日期,则不进行链接。

所以拿这个例子

寻呼机消息表

ID|pDateTime       |pCapcode|pMessage
1 |2014-06-24 14:00|1       |This is a test message
2 |2014-06-24 15:00|1       |This is a test message
3 |2014-06-24 16:00|2       |This is a test message

Capcode表

CapcodeID|pCapcode|Name     |bStartDateTime  |bFinishDateTime
1        |1       |Example 1|2014-06-24 14:00|2014-06-24 14:30
2        |1       |Example 2|2014-06-24 14:31|
3        |2       |Example 3|2014-06-24 14:31|

在上面的示例中,我想做的就是联接表,以便获得如下表:

ID|pDateTime       |pCapcode|Name     |pMessage
1 |2014-06-24 14:00|1       |Example 1|This is a test message
2 |2014-06-24 15:00|1       |Example 2|This is a test message
3 |2014-06-24 16:00|2       |Example 3|This is a test message

因此,您可以看到,基本上因为capcode在pCapcode表中存在两次,所以它采用了介于日期和时间之间的条目,这样我就可以在capcode表中具有相同bCapcode的多个条目,如果他们会被更改,只需在Capcodes表中添加更改的日期,然后添加一个新条目,而不是因为我无法正确选择它们而不再具有准确的历史条目。

抱歉,如果没有太大意义,我可以澄清一下是否需要,但我想我已经涵盖了我所问的大部分内容,这实际上是哪种SQL语句将允许我执行上述操作,因为它不是从我看到的内容来看,简单的INNER / LEFT JOIN。

谢谢!

您仍然可以加入他们。 只要确保仅使用完成时间即可。

select a.id, a.pdatetime, b.name, a.pmessage
from PageMessage a
join Capcode b on a.pcapcode = b.pcapcode and b.bstartdatetime <= a.pdatetime 
     and (b.bfinishdatetime is null or a.pdatetime <= b.bfinishdatetime);
select  ID,pdatetime,pcapcode,0 as 'Name',pmessage from Pager_Message 
union 
select  ID,0,pcapcode,name,0  from Capcode 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM