+ -
当前位置:首页 → 问答吧 → 关于几个SQL查询语句

关于几个SQL查询语句

时间:2011-06-28

来源:互联网


id name status date
1 A 1 2010-1-3
2 A 2 2010-1-4
3 I 1 2010-1-3
4 I 2 2010-1-4
5 A 1 2011-1-3
6 B 1 2011-1-3
7 C 1 2011-1-3
8 D 1 2011-1-3
9 I 1 2011-1-3
10 I 2 2011-1-4
11 J 1 2011-1-4
12 A 2 2011-2-3
13 B 2 2011-2-3
14 E 1 2011-2-3
15 E 2 2011-2-3
16 F 1 2011-2-3
17 F 2 2011-2-3
18 E 1 2011-2-5
19 E 1 2011-2-6
20 G 1 2011-2-3
21 H 1 2011-2-3
22 J 2 2011-2-6
23 J 1 2011-2-7
24 G 2 2011-3-3


name表示灯,status表示开关状态(1表示开,2表示关)
进行如下查询:
查询时间设定:2011-2-1到2011-2-28之间
相对于这个时间查询新打开的灯
所有新打开的灯,结果如下:
14 E 1 2011-2-3
18 E 1 2011-2-5
16 F 1 2011-2-3
20 G 1 2011-2-3
21 H 1 2011-2-3
23 J 1 2011-2-7


新打开的灯中还开着的,结果如下:
20 G 1 2011-2-3
21 H 1 2011-2-3
23 J 1 2011-2-7


新打开的灯已经关了,结果如下:
14 E 1 2011-2-3
18 E 1 2011-2-5
16 F 1 2011-2-3

相对于这个时间曾经打开的灯(相当于存量)
曾经打开的所有灯,结果如下:(2010的A打开又关了,这样的灯不算)
5 A 1 2011-1-3
6 B 1 2011-1-3
7 C 1 2011-1-3
8 D 1 2011-1-3
11 J 1 2011-1-4

曾经打开的灯还开着的,结果如下:
7 C 1 2011-1-3
8 D 1 2011-1-3
11 J 1 2011-1-4

曾经打开的灯已经关了,结果如下:
5 A 1 2011-1-3
6 B 1 2011-1-3


想了两天,写出了几个查询,不过感觉写的很繁琐,而且效率很低,希望大家抽空帮忙看看,分不多,谢谢了

作者: yintao1021   发布时间: 2011-06-28

该回复于2011-06-28 11:25:28被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#2楼 得分:0回复于:2011-06-28 11:23:05
所有新打开的灯
select * from test where status='1' and date between '2011-2-1' and '2011-2-29'
新打开的灯中还开着的
select * from test where status='1' and date between '2011-2-1' and '2011-2-29' and name not in (select name from test where status='2' and date between '2011-2-1' and '2011-2-29')
新打开的灯已经关了(J也查询出来了)
select * from test where status='1' and date between '2011-2-1' and '2011-2-29' and name in (select name from test where status='2' and date between '2011-2-1' and '2011-2-29')
曾经打开的所有灯
select * from test a where status='8' and date in (select max(date) from test where a.name=name and date between 'min(date)' and '2011-02-01' group by name)
曾经打开的灯还开着的
select * from test a where status='8' and date in (select max(date) from test where a.name=name and date between 'min(date)' and '2011-02-01' group by name) and name not in (select name from test where status='T8' and date between '2011-2-1' and '2011-2-29')
曾经打开的灯已经关了
select * from test a where status='8' and date in (select max(date) from test where a.name=name and date between 'min(date)' and '2011-02-01' group by name) and name in (select name from test where status='T8' and date between '2011-2-1' and '2011-2-29')

作者: yangshuai518   发布时间: 2011-06-28

热门下载

更多