删除下面频次为q2h中的任意两条记录

pengpeng409 2017-11-15 08:51:56
nam p_id dname dcode occ_time amount pc total
张三 00001 螺内酯片 db20033 2017-11-02 00:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 02:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 04:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 06:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 08:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 10:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 12:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 14:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 16:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 18:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 20:00 1 q2h 10
张三 00001 螺内酯片 db20033 2017-11-02 22:00 1 q2h 10
李四 0002 呋塞米片 db20044 2017-11-03 08:00 2 8-12-16 6
李四 0002 呋塞米片 db20044 2017-11-03 12:00 2 8-12-16 6
李四 0002 呋塞米片 db20044 2017-11-02 16:00 2 8-12-16 6

上面的数据,要删除频次为q2h,同一个频次,同一个病人,同一个药品,occ_time总数量和total/amount总数量不一致时删除
多余的记录,少多少就删掉多少记录
...全文
133 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengpeng409 2017-11-16
  • 打赏
  • 举报
回复
恩,对的。厉害
听雨停了 2017-11-15
  • 打赏
  • 举报
回复

use Tempdb
go
--> --> 听雨停了-->生成测试数据
 
if not object_id(N'Tempdb..#tab') is null
	drop table #tab
Go
Create table #tab(nam nvarchar(22),p_id nvarchar(25),dname nvarchar(24),dcode nvarchar(27),occ_time  DATETIME,amount int, pc nvarchar(27),total int)
Insert #tab
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 00:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 02:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 04:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 06:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 08:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 10:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 12:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 14:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 16:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 18:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 20:00',1,N'q2h',10 union all
select N'张三',N'00001',N'螺内酯片',N'db20033','2017-11-02 22:00',1,N'q2h',10 union all
select N'李四',N'0002',N'呋塞米片',N'db20044','2017-11-03 08:00',2,N'8-12-16',6 union all
select N'李四',N'0002',N'呋塞米片',N'db20044','2017-11-03 12:00',2,N'8-12-16',6 union all
select N'李四',N'0002',N'呋塞米片',N'db20044','2017-11-02 16:00',2,N'8-12-16',6
Go
--测试数据结束

;WITH cte AS (
         SELECT *,
                ROW_NUMBER() OVER(PARTITION BY nam, dname, pc ORDER BY occ_time) AS 
                rn,
                total / amount AS cnt
         FROM   #tab
)
--可以把下面的select反注释一下,查询出来看看
--SELECT * FROM cte 
DELETE FROM cte WHERE rn>cnt

(2 行受影响)
大概意思是上面的数据,张三需要删除两条,李四不需要删除记录,对吧
pengpeng409 2017-11-15
  • 打赏
  • 举报
回复
请各位高手帮助一下。谢谢了。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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