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

我是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            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!我想告诉你,你的问题已经完全格式化了,干得好!如果要更新表中的值,请查看。如果要在“选择”中显示它,请查看