刚开始学SQL 碰到个难题

a16896168 2009-02-22 07:58:21
日期(NCHAR)名称 号码1 号码2 序号 标记 日期(NCHAR) 名称 号码1 号码2 序号 标记

20060101 # A1 B1 2 M
20060101 * A1 B1 8 N 20060101 * A1 B1 8 N
20060104 # A2 B2 9 P
20060105 * A2 B2 6 Q 20060105 * A1 B1 6 Q
20070101 # A1 B1 4 K
20070102 A2 B2 7 L

要求: 当 左表中的 号码1+号码2相同,日期也相同时 ,输出序号大的那一行
当 左表中的 号码1+号码2相同,但日期不同时 ,输出日期大的那一行

如右图的结果
刚开始学SQL 碰到个难题


忘记了 还有个条件 :只选名称为*的
...全文
36 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wojiaochenglong 2009-02-22
  • 打赏
  • 举报
回复
......
htl258_Tony 2009-02-22
  • 打赏
  • 举报
回复
-->第一题:
select *
from 左表 a
left join (select [日期(NCHAR)],号码1,号码2,max(序号) 序号 from 左表 group by 日期(NCHAR),号码1,号码2) b
on a.序号=b.序号
where a.名称='*'
-->第二题:
select*
from 左表 a
left join (select max([日期(NCHAR)]) 日期,号码1,号码2,max(序号) 序号 from 左表 group by 号码1,号码2) b
on a.日期=b.日期 and a.序号=b.序号
where a.名称='*'

22,210

社区成员

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

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