Sql 在表中查找在另一个表中的特定日期后未重复的唯一记录
我是SQL的初学者,正在尝试解决一个问题。Sql 在表中查找在另一个表中的特定日期后未重复的唯一记录,sql,sql-server,Sql,Sql Server,我是SQL的初学者,正在尝试解决一个问题。 我的数据库中有两个表,公司和发票,如下所示 公司表 id name active 1 company A True 2 company B True 3 company C True 4 company D True 5 company E True id
我的数据库中有两个表,公司和发票,如下所示 公司表
id name active
1 company A True
2 company B True
3 company C True
4 company D True
5 company E True
id date companyid
1 18/01/2018 4
2 06/05/2014 1
3 04/03/2017 4
4 25/05/2016 3
5 17/04/2018 2
6 10/11/2017 3
发票表
id name active
1 company A True
2 company B True
3 company C True
4 company D True
5 company E True
id date companyid
1 18/01/2018 4
2 06/05/2014 1
3 04/03/2017 4
4 25/05/2016 3
5 17/04/2018 2
6 10/11/2017 3
我想获取公司唯一值列表,如果公司在2017年1月1日之后没有发票,则将“活动”列值更改为False。这样一来,A公司和E公司的活动列应更改为False。期望的结果是:id name active
1 company A False
2 company B True
3 company C True
4 company D True
5 company E False
我已经试过了,但这只是一半,我无法解决剩下的问题:
select distinct A.* from company A
inner join invoice B
on B.companyid = A.id
where B.date < '20170101'
从公司A中选择不同的A.*
内部联接发票B
在B.companyid=A.id上
其中B.日期<'20170101'
在下列情况下使用join和case
select t1.id,t2.name,
case when t2.date<'01/01/2017' and t1.active then
'false' else t1.active end
as active
from Company t1 join invoice t2 on t1.id=t2.id
选择t1.id,t2.name,
当t2.date如你所说,你的答案确实达到了一半。您只需要一条update语句即可进行查询。
UPDATE A SET active = 'false'
from company A
inner join invoice B
on B.companyid = A.id
where B.date < '20170101'
UPDATE A SET active='false'
来自A公司
内部联接发票B
在B.companyid=A.id上
其中B.日期<'20170101'
您可以使用以下方法:
SELECT c.id, c.name,
MAX(CASE WHEN i.date > '01/01/2017' THEN 'True' ELSE 'False' END) AS active
FROM company c
LEFT JOIN invoice i
ON i.companyid = c.id
GROUP BY c.id, c.name;
使用子查询和聚合时的用例
select id, name, case when mdate>'20170101' then 'Active' else 'False' end as Active
from
(
select A.id,A.name,max(date) mdate from company A
left join invoice B
on B.companyid = A.id
group by A.id,A.name)a
欢迎来到StackOverflow!我想告诉你,你的问题已经完全格式化了,干得好!如果要更新表中的值,请查看。如果要在“选择”中显示它,请查看