SQL 同表分组

oo00gg99 2009-06-01 04:06:50
高手帮忙呀
字段 id MID istop date
id 自增 MID类型 istop 排序 date 日期
id MID istop date
1, 1, 1, 日期1
2, 1, 0, 日期2
3, 2, 3, 日期3
4, 2, 2, 日期4
5, 2, 2, 日期4
6, 3, 1, 日期4
按istop 和date 排序获取每个MID类型的前2条数据
即:
1, 1, 1, 日期1
2, 1, 0, 日期2
3, 2, 3, 日期3
4, 2, 2, 日期4
6, 3, 1, 日期4
...全文
92 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo00gg99 2009-06-01
  • 打赏
  • 举报
回复
小弟很笨 排序怎么做呀!
SQL77 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oo00gg99 的回复:]
各位大哥SQL2000的 有么?
[/Quote]
8楼试试?
SQL77 2009-06-01
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE ID IN(SELECT ID FROM (SELECT MAX(ID)ID,日期 FROM TB GROUP BY 日期 )AS T)

上面弄错
水族杰纶 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oo00gg99 的回复:]
各位大哥SQL2000的 有么?
[/Quote]
1 樓
oo00gg99 2009-06-01
  • 打赏
  • 举报
回复
各位大哥SQL2000的 有么?
SQL77 2009-06-01
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE ID IN(SELECT ID FROM (SELECT ID,MAX(日期)日期 FROM TB )AS T)
水族杰纶 2009-06-01
  • 打赏
  • 举报
回复
DECLARE @TB TABLE([id] INT, [MID] INT, [istop] INT, [date] NVARCHAR(3))
INSERT @TB
SELECT 1, 1, 1, N'日期1' UNION ALL
SELECT 2, 1, 0, N'日期2' UNION ALL
SELECT 3, 2, 3, N'日期3' UNION ALL
SELECT 4, 2, 2, N'日期4' UNION ALL
SELECT 5, 2, 2, N'日期4' UNION ALL
SELECT 6, 3, 1, N'日期4'
SELECT * FROM @TB T WHERE ID IN(SELECT TOP 2 ID FROM @TB WHERE MID=T.MID)
/*
id MID istop date
----------- ----------- ----------- ----
1 1 1 日期1
2 1 0 日期2
3 2 3 日期3
4 2 2 日期4
6 3 1 日期4

(影響 5 個資料列)
*/
csdyyr 2009-06-01
  • 打赏
  • 举报
回复
DECLARE @TB TABLE([id] INT, [MID] INT, [istop] INT, [date] NVARCHAR(3))
INSERT @TB
SELECT 1, 1, 1, N'日期1' UNION ALL
SELECT 2, 1, 0, N'日期2' UNION ALL
SELECT 3, 2, 3, N'日期3' UNION ALL
SELECT 4, 2, 2, N'日期4' UNION ALL
SELECT 5, 2, 2, N'日期4' UNION ALL
SELECT 6, 3, 1, N'日期4'

SELECT *
FROM (
SELECT *,SEQ=ROW_NUMBER() OVER (PARTITION BY MID ORDER BY istop,date)
FROM @TB
) T
WHERE SEQ<=2
/*
id MID istop date SEQ
----------- ----------- ----------- ---- --------------------
2 1 0 日期2 1
1 1 1 日期1 2
4 2 2 日期4 1
5 2 2 日期4 2
6 3 1 日期4 1
*/
lg3605119 2009-06-01
  • 打赏
  • 举报
回复

;with cte as
(
select *,px = row_number() over(partition by MID order by date) from table
)
select * from cte where px <=2
水族杰纶 2009-06-01
  • 打赏
  • 举报
回复
SELECT * FROM TB T WHERE ID IN(SELECT TOP 2 ID FROM TB WHERE MID=T.MID)

22,209

社区成员

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

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