各位老师好,我还有一个SQL语句的问题,也一直写不出来,请各位老师指点一下,谢谢。
简单说,以表1为基础,从表2中提取符合要求的数值,形成表3,详见下面例子。
表1
ID 名称
1 AAAAAAAAAA
2 BBBBBBBBBB
3 CCCCCCCCCC
4 DDDDDDDDDD
5 EEEEEEEEEE
表2
ID 名称 更新时间
34 BBBBBBBBBB 6月2日
35 AAAAAAAAAA 6月1日
36 CCCCCCCCCC 6月9日
37 BBBBBBBBBB 7月25日
38 BBBBBBBBBB 7月25日
39 CCCCCCCCCC 3月6日
40 CCCCCCCCCC 7月25日
41 DDDDDDDDDD 7月25日
42 DDDDDDDDDD 7月25日
43 DDDDDDDDDD 7月25日
表3 (希望通过SQL语句实现这个表的效果)
ID 名称 最后更新时间 今天更新数量(假设为7月25日)
1 AAAAAAAAAA 6月1日 0
2 BBBBBBBBBB 7月25日 2
3 CCCCCCCCCC 7月25日 1
4 DDDDDDDDDD 7月25日 3
5 EEEEEEEEEE
------解决方案--------------------
SELECT T1.ID
, T1.名称
, MAX(T2.更新日期) AS 最后更新时间
, (SELECT COUNT(*) FROM 表2 WHERE 名称 = T1.名称 AND 更新日期 = MAX(T2.更新日期) GROUP BY 名称) AS 今天更新数量
FROM 表1 T1
LEFT JOIN 表2 T2 ON T1.名称 = T2.名称
GROUP BY T1.ID
, T1.名称
------解决方案--------------------
SELECT T1.*,A.LASTDATE,ISNULL(B.TODAYCOUNT,0) AS TODAYCOUNT
FROM T1
LEFT JOIN
(SELECT NAME,MAX(UPDATETIME) AS LASTDATE FROM T2 GROUP BY NAME)A ON T1.NAME=A.NAME
LEFT JOIN
(SELECT NAME,COUNT(*) AS TODAYCOUNT FROM T2 WHERE UPDATETIME=CONVERT(VARCHAR(10),GETDATE(),112) GROUP BY NAME ) B ON T1.NAME=B.NAME
这样?
------解决方案--------------------
在上次的基础上稍作调理就可以了:
create table 表1
(ID int,
名称 char(20))
insert into 表1 values
(1,'AAAAAAAAAA'),
(2,'BBBBBBBBBB'),
(3,'CCCCCCCCCC'),
(4,'DDDDDDDDDD'),
(5,'EEEEEEEEEE')
select * from 表1
create table 表2
(ID int,
名称 char(20),
更新时间 char(10))
insert into 表2 values
(34,'BBBBBBBBBB','6月2日'),
(35,'AAAAAAAAAA','6月1日'),
(36,'CCCCCCCCCC','6月9日'),
(37,'BBBBBBBBBB','7月25日'),
(38,'BBBBBBBBBB','7月25日'),
(39,'CCCCCCCCCC','3月6日'),
(40,'CCCCCCCCCC','7月25日'),
(41,'DDDDDDDDDD','7月25日'),
(42,'DDDDDDDDDD','7月25日'),
(43,'DDDDDDDDDD','7月25日')
select * from 表2
with ta as
(
select 名称,COUNT(更新时间) as cnt from 表2
where 更新时间=rtrim(MONTH(GETDATE()))+'月'+RTRIM(DAY(GETDATE()))+'日'
group by 名称 )
select a.ID,a.名称,isnull(MAX(更新时间),'') 最后更新时间,
ISNULL(c.cnt,0) 今天更新数 from 表1 a
left join 表2 b on a.名称=b.名称
left join ta c on a.名称=c.名称
group by a.ID,a.名称,c.cnt