首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取使用SQL保存操作的表链接中两个表之间的最后一个链接。

获取使用SQL保存操作的表链接中两个表之间的最后一个链接。
EN

Stack Overflow用户
提问于 2014-07-23 11:42:30
回答 1查看 38关注 0票数 1

我有两张桌子:个人和音乐。我在他们之间有一个N到N的连接。所以我需要一张中间的桌子。我还想保存它们之间连接的演化,所以我决定中间表将保存操作(开始听音乐,停下来听音乐)。

例如:

代码语言:javascript
复制
IdPerson | IdMusic  | Start    | DateTime
1        | 1        | true     | 10/01/2014
1        | 2        | true     | 10/01/2014
1        | 2        | false    | 11/01/2014
2        | 1        | true     | 11/01/2014
1        | 2        | true     | 12/01/2014  

这个表意味着人1开始听音乐1和2 10,它停止音乐2 11,并重新启动音乐2在12日。人2开始音乐1 11。

在这个表中,(IdPerson,IdMusic,Date)是唯一的。

如何使用SQL获取一个人在给定日期收听的音乐?

我认为,我们首先需要使用WHERE IdPerson=IdgivenPerson ORDER BY date,但之后我不再使用SQL来完成其余的工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-23 11:52:43

以下是一种方法:

代码语言:javascript
复制
select c.idMusic
from Connections c 
where c.IdPerson = IdgivenPerson and
      c.datetime <= GivenDate
group by c.idMusic
having sum(case when start = 'true' then 1
                when start = 'false' then -1
           end) > 0;

它会在日期之前计算开始和停止的次数。当开始多于停止时,音乐的id就会返回。

编辑:

如果你只想要最后一个动作:

代码语言:javascript
复制
select c.*
from Connections c 
where c.IdPerson = IdgivenPerson and
      not exists (select 1
                  from Connections c2
                  where c2.IdPerson = c.IdgivenPerson and
                        c2.IdMusic = c.IdMusic and
                        c2.date > c.date and
                        c2.date <= GivenDate
                  );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24909563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档