select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
#3
这样是按照时间提取第一行的数据吧。
#4
看不懂,也不行
#5
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
#6
vs2010(C#),sql2012
表:table1
ID time 卡号 分数
1 2016-7 01 65
2 2016-8 01 70
2 2016-8 01 70
3 2016-5 03 66
4 2016-3 02 75
我想得到的是某个ID的数据并卡号相同只显示一个,分数那一列不显示,如下:
ID time 卡号
2 2016-8 01
2 2016-8 01
怎么实现:select ??distinct?? group by?? 不知道怎么写????
#7
select min(ID), min(time), 卡号 from table1 group by 卡号
#8
+1
#9
min(ID) 跟 min(time) 会产生错误匹配。
#10
有这种需求的,应该不会关心 具体同一分组的两条记录中数据谁家是谁家的。
#11
select min(ID), min(time), 卡号 from table1 group by 卡号
min(ID) 跟 min(time) 会产生错误匹配。
SELECT ID,time ,卡号 FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY 卡号 order by ID) as iIndex ,count(0)OVER(PARTITION BY 卡号) AS linecount FROM table1) t WHERE iIndex=1 and ID=2 ";多加了and ID=2筛选有时出问题;不加这个条件就无问题,
这个select min(ID), min(time), 卡号 from table1 group by 卡号;我变成select min(ID), min(time), 卡号 from table1 where ID=2 group by 卡号;可我的ID和time在dataGridView1列名变了,
#12
select min(ID), min(time), 卡号 from table1 group by 卡号
+1
ID和time在dataGridView1列名变了,SELECT ID,time ,卡号 FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY 卡号 order by ID) as iIndex ,count(0)OVER(PARTITION BY 卡号) AS linecount FROM table1) t WHERE iIndex=1 and ID="+n+"";这条语句有什么问题,我找不到
#13
楼主,这是最简单的SQL语句,这都不会,你的SQL有点麻烦哟,买本书先学习一下吧
#14
楼主,这是最简单的SQL语句,这都不会,你的SQL有点麻烦哟,买本书先学习一下吧
我不是学这个的啊,接触这个不到两个月,公司要求我写,没办法啊!!救救场啊,大哥
#15
你这数据也有问题啊,id都重复,怎么破
#16
前一阵给别人写的自己改改完蛋去吧,看不懂就算了。
SELECT * FROM table x where exists(select 1 from (select id, max(data) maxdata from table group by id) y
where x.id=y.id and x.rowid< y.maxdata );
差不多这样
#17
有图有真相
图中是sql server优化过的,原始我是这么写的
select a.ID, a.time, a.卡号
from Table1 as a,(select min(ID) as ID, 卡号 from Table1 group by 卡号) as b
where a.卡号 = b.卡号 and a.ID = b.ID
order by a.ID
#18
Select
t1.Id, t1.Time, t1.卡号
from
Table1 t1
Left Join (select Min(Id) From Table1 group by 卡号) t2 on t1.Id = t2.Id
where
t2.Id Is Not Null
#19
这样子?
selec * from(select * from table1 order by 分数 desc) group by 分数
#20
这样子?
selec * from(select * from table1 order by 分数 desc) temp group by 分数
#21
select * from table1 where ID in(select mid from (select min(ID) mid,卡号 from table1 group by 卡号) m)
#22
select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
如果只是过滤重复 ID,就如 #21 楼那样的例子,写为
select tb.ID, tb.time, tb.[卡号] from (select min(ID) as ID from [your table] group by [卡号]) as ta
left join [your table] as tb
on ta.ID=tb.ID
这样的关系运算即可。SQL Server 会自动将“In”运算改为关系运算符,所以你如果了解普通的关系运算(left join、inner join)那么对 sql 的知识就更加完备。
如果要取每一个“卡号”第一次发生的准确时间,可以这样写
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
第二个跟第一个其实非常类似。会了第一个,就很容易理解第二个查询。
#23
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
#24
不仅仅要求 ID 匹配而且要求 time 匹配 --> 不仅仅要求 卡号 匹配而且要求 time 匹配
用组合的条件代替主键 ID 为条件,这句是“扩展”的意思。当需要考虑的条件更多,那么你可以增加更多关联条件,而查询结构并没有什么改变,仍然是 left join 关联运算!
select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
如果只是过滤重复 ID,就如 #21 楼那样的例子,写为
select tb.ID, tb.time, tb.[卡号] from (select min(ID) as ID from [your table] group by [卡号]) as ta
left join [your table] as tb
on ta.ID=tb.ID
这样的关系运算即可。SQL Server 会自动将“In”运算改为关系运算符,所以你如果了解普通的关系运算(left join、inner join)那么对 sql 的知识就更加完备。
如果要取每一个“卡号”第一次发生的准确时间,可以这样写
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
第二个跟第一个其实非常类似。会了第一个,就很容易理解第二个查询。
太无耻了居然抄我的。。我要告老师!
#27
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
我的数据是多台下位机发送接收的,每台下位机有一个ID号,我是想查询这个ID的数据但查询里卡号重的只显示一条,查询的只显示 ID、time、卡号这三列;select max(id),max(time),卡号 from table1 group by 卡号 现在暂时用这个实现,你说会得到跟原始数据不搭界的查询结果;列如:
vs2010(C#),sql2012
表:table1
ID time 卡号 分数
1 2016-7 05 65
2 2016-8 01 70
2 2016-6 01 78
2 2016-5 03 66
4 2016-3 02 75
我想得到的是某个ID的数据并卡号相同只显示一个,分数那一列不显示,查询结果如下:
ID time 卡号
2 2016-8 01
2 2016-5 03
#28
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
#29
有图有真相
图中是sql server优化过的,原始我是这么写的
select a.ID, a.time, a.卡号
from Table1 as a,(select min(ID) as ID, 卡号 from Table1 group by 卡号) as b
where a.卡号 = b.卡号 and a.ID = b.ID
order by a.ID
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
我用着这个,如下结果:
表:table1
ID time 卡号 分数
1 2016-7 05 65
2 2016-8 01 70
2 2016-6 01 78
2 2016-5 03 66
4 2016-3 02 75
查询结果如下:
ID time 卡号
2 2016-8 01
2 2016-5 03
#30
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
这个是oracle的写法,如果是sqlserver,还是用#26这样写吧
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
#31
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
这个是oracle的写法,如果是sqlserver,还是用#26这样写吧
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
#6
vs2010(C#),sql2012
表:table1
ID time 卡号 分数
1 2016-7 01 65
2 2016-8 01 70
2 2016-8 01 70
3 2016-5 03 66
4 2016-3 02 75
我想得到的是某个ID的数据并卡号相同只显示一个,分数那一列不显示,如下:
ID time 卡号
2 2016-8 01
2 2016-8 01
怎么实现:select ??distinct?? group by?? 不知道怎么写????
#7
select min(ID), min(time), 卡号 from table1 group by 卡号
#8
select min(ID), min(time), 卡号 from table1 group by 卡号
+1
#9
select min(ID), min(time), 卡号 from table1 group by 卡号
min(ID) 跟 min(time) 会产生错误匹配。
#10
select min(ID), min(time), 卡号 from table1 group by 卡号
min(ID) 跟 min(time) 会产生错误匹配。
有这种需求的,应该不会关心 具体同一分组的两条记录中数据谁家是谁家的。
#11
select min(ID), min(time), 卡号 from table1 group by 卡号
min(ID) 跟 min(time) 会产生错误匹配。
SELECT ID,time ,卡号 FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY 卡号 order by ID) as iIndex ,count(0)OVER(PARTITION BY 卡号) AS linecount FROM table1) t WHERE iIndex=1 and ID=2 ";多加了and ID=2筛选有时出问题;不加这个条件就无问题,
这个select min(ID), min(time), 卡号 from table1 group by 卡号;我变成select min(ID), min(time), 卡号 from table1 where ID=2 group by 卡号;可我的ID和time在dataGridView1列名变了,
#12
select min(ID), min(time), 卡号 from table1 group by 卡号
+1
ID和time在dataGridView1列名变了,SELECT ID,time ,卡号 FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY 卡号 order by ID) as iIndex ,count(0)OVER(PARTITION BY 卡号) AS linecount FROM table1) t WHERE iIndex=1 and ID="+n+"";这条语句有什么问题,我找不到
#13
楼主,这是最简单的SQL语句,这都不会,你的SQL有点麻烦哟,买本书先学习一下吧
#14
楼主,这是最简单的SQL语句,这都不会,你的SQL有点麻烦哟,买本书先学习一下吧
我不是学这个的啊,接触这个不到两个月,公司要求我写,没办法啊!!救救场啊,大哥
#15
你这数据也有问题啊,id都重复,怎么破
#16
前一阵给别人写的自己改改完蛋去吧,看不懂就算了。
SELECT * FROM table x where exists(select 1 from (select id, max(data) maxdata from table group by id) y
where x.id=y.id and x.rowid< y.maxdata );
差不多这样
#17
有图有真相
图中是sql server优化过的,原始我是这么写的
select a.ID, a.time, a.卡号
from Table1 as a,(select min(ID) as ID, 卡号 from Table1 group by 卡号) as b
where a.卡号 = b.卡号 and a.ID = b.ID
order by a.ID
#18
Select
t1.Id, t1.Time, t1.卡号
from
Table1 t1
Left Join (select Min(Id) From Table1 group by 卡号) t2 on t1.Id = t2.Id
where
t2.Id Is Not Null
#19
这样子?
selec * from(select * from table1 order by 分数 desc) group by 分数
#20
这样子?
selec * from(select * from table1 order by 分数 desc) temp group by 分数
#21
select * from table1 where ID in(select mid from (select min(ID) mid,卡号 from table1 group by 卡号) m)
#22
select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
如果只是过滤重复 ID,就如 #21 楼那样的例子,写为
select tb.ID, tb.time, tb.[卡号] from (select min(ID) as ID from [your table] group by [卡号]) as ta
left join [your table] as tb
on ta.ID=tb.ID
这样的关系运算即可。SQL Server 会自动将“In”运算改为关系运算符,所以你如果了解普通的关系运算(left join、inner join)那么对 sql 的知识就更加完备。
如果要取每一个“卡号”第一次发生的准确时间,可以这样写
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
第二个跟第一个其实非常类似。会了第一个,就很容易理解第二个查询。
#23
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
#24
不仅仅要求 ID 匹配而且要求 time 匹配 --> 不仅仅要求 卡号 匹配而且要求 time 匹配
用组合的条件代替主键 ID 为条件,这句是“扩展”的意思。当需要考虑的条件更多,那么你可以增加更多关联条件,而查询结构并没有什么改变,仍然是 left join 关联运算!
select first( ID),first(TIme),卡号 from table1 group by 卡号.但是这种语法只能access里面用。
其他的我也不知道怎么提取第一行的数据。
我只是想数据去重;要提取数据吗,作为dataGridView1的DataSource ;
如果只是过滤重复 ID,就如 #21 楼那样的例子,写为
select tb.ID, tb.time, tb.[卡号] from (select min(ID) as ID from [your table] group by [卡号]) as ta
left join [your table] as tb
on ta.ID=tb.ID
这样的关系运算即可。SQL Server 会自动将“In”运算改为关系运算符,所以你如果了解普通的关系运算(left join、inner join)那么对 sql 的知识就更加完备。
如果要取每一个“卡号”第一次发生的准确时间,可以这样写
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
第二个跟第一个其实非常类似。会了第一个,就很容易理解第二个查询。
太无耻了居然抄我的。。我要告老师!
#27
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
我的数据是多台下位机发送接收的,每台下位机有一个ID号,我是想查询这个ID的数据但查询里卡号重的只显示一条,查询的只显示 ID、time、卡号这三列;select max(id),max(time),卡号 from table1 group by 卡号 现在暂时用这个实现,你说会得到跟原始数据不搭界的查询结果;列如:
vs2010(C#),sql2012
表:table1
ID time 卡号 分数
1 2016-7 05 65
2 2016-8 01 70
2 2016-6 01 78
2 2016-5 03 66
4 2016-3 02 75
我想得到的是某个ID的数据并卡号相同只显示一个,分数那一列不显示,查询结果如下:
ID time 卡号
2 2016-8 01
2 2016-5 03
#28
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
#29
有图有真相
图中是sql server优化过的,原始我是这么写的
select a.ID, a.time, a.卡号
from Table1 as a,(select min(ID) as ID, 卡号 from Table1 group by 卡号) as b
where a.卡号 = b.卡号 and a.ID = b.ID
order by a.ID
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
我用着这个,如下结果:
表:table1
ID time 卡号 分数
1 2016-7 05 65
2 2016-8 01 70
2 2016-6 01 78
2 2016-5 03 66
4 2016-3 02 75
查询结果如下:
ID time 卡号
2 2016-8 01
2 2016-5 03
#30
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
这个是oracle的写法,如果是sqlserver,还是用#26这样写吧
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
#31
第二个查询是第一个查询的扩展,也就是说,在进行关心运算时,不仅仅要求 ID 匹配而且要求 time 匹配,才是结果。这能得到准确的结果。
如果是 select min(time),min(ID) 那就会得到跟原始数据不搭界的查询结果了。
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
用这个会有问题吗?
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2
这个是oracle的写法,如果是sqlserver,还是用#26这样写吧
select ta.ID, ta.time, ta.[卡号] from (select 卡号,min(time) as time from [your table] group by 卡号 ) as tb
left join [your table] as ta
on ta.卡号=tb.卡号 and ta.time=tb.time
select id,time,[卡号] from (select *,ROW_NUMBER() over (partition by [卡号] order by [time] desc) as rw
from [table1] ) as t1 where rw = 1 and id =2