sql server 2000 最小值问题请教?

wyxdrqc 2015-07-16 09:49:37
现有sql 2000 某数据库中的表 A ,包含字段为:key, Cardid,name, Date
其中相同cardid值有多条记录,比如 :
Key cardid name date
1 001 王天 20140101
30 001 王天 20140702
........
244 056 陈叶 20140103
256 056 陈叶 20140805

现在需要完成两个功能:
1.通过查询提取每个cardid相同的 记录中date最小记录,即由所有cardid 组成的最小日期记录集
2. 将查询到的最小集插入另一个表B中。

请各位大哥多多指点,谢谢了。
...全文
104 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyxdrqc 2015-07-16
  • 打赏
  • 举报
回复
2楼的大哥,查询显示正常了,但加入 insert into B 之后,显示 : 服务器: 消息 208,级别 16,状态 1,行 1 对象名 'B' 无效。 该如何解决呢?
Tiger_Zhao 2015-07-16
  • 打赏
  • 举报
回复
如果表B还没创建就用下面这种方式
SELECT A.*
INTO B
FROM ...
wyxdrqc 2015-07-16
  • 打赏
  • 举报
回复
这位大哥,运行后显示“对象B无效”呢?
许晨旭 2015-07-16
  • 打赏
  • 举报
回复
把这个结果集放到衣柜临时表里,让后取ROW=1的值插入到另外的表就可以了
create table #t
(
	[Key]    int,
	cardid varchar(5),
	name   varchar(5),
	[date] date
)
insert into #t
select 1,'001','王天','20140101' union all
select 30,'001','王天','20140702' union all
select 244,'056','陈叶','20140103' union all
select 256,'056','陈叶','20140805'

select count(*) as row,a.[Key],a.cardid, a.name,a.[date]
from #t a
inner join #t b on a.cardid = b.cardid and a.[date]>=b.[date]
group by a.cardid, a.name,a.[date],a.[Key]
order by 1,a.[date]

/*
row         Key         cardid name  date
----------- ----------- ------ ----- ----------
1           1           001    王天    2014-01-01
1           244         056    陈叶    2014-01-03
2           30          001    王天    2014-07-02
2           256         056    陈叶    2014-08-05

(4 行受影响)
*/
Tiger_Zhao 2015-07-16
  • 打赏
  • 举报
回复
INSERT INTO B
SELECT A.*
FROM ( -- 为了防止最小date有多条,再求最小的 key
SELECT t1.cardid,
MIN(A.[key]) [key]
FROM ( -- 求每个 cardid 的最小 date
SELECT cardid,
MIN(date) date
FROM A
GROUP BY cardid
) t1
JOIN A
ON t1.cardid = A.cardid
AND t1.date = A.date
GROUP BY t1.cardid
) t2
JOIN A
ON t2.[key] = A.[key]

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧