0

我想知道,如果我可以执行这样的操作。我在表中有以下数据排列:

id SessionId P_Name P_TypeId
1  abc        XYZ   5
2  abc        XYZ   5
3  abc        XYZ   5
4  abc        XYZ   5
5  abc        XYZ   5
6  abc        XYZ   5
7  abc        XYZ   5  
8  abc        XYZ   5

在这里,我有 8 个类似的项目,但有唯一的 ID。

健康)状况:

从前端我将通过[P_TypeId] = 5,然后查询将使用删除语句从表中仅删除一项。这可能吗?

4

3 回答 3

3

是的,例如使用ROW_NUMBER

WITH x 
     AS (SELECT id, 
                sessionid, 
                p_name, 
                p_typeid, 
                RN = Row_number() 
                       OVER( 
                         partition BY sessionid, p_name, p_typeid 
                         ORDER BY id) 
         FROM   dbo.tablename
         WHERE P_TypeId = @P_TypeId ) 
DELETE x 
WHERE  rn = 1 

删除每个组的最低 id。

演示

于 2013-01-27T19:07:37.370 回答
2
delete top(1) from mytable where p_typeid = 5

以上将删除包含 p_typeid 为 5 的一行。

如果要删除 id 最低的行,请尝试

 with t as (
   select top(1) * from mytable where p_typeid = 5
   order by id
 )
 delete from t
于 2013-01-27T19:11:17.153 回答
0

你可以这样做:

delete from dbo.your_tablename 
where id = (select top 1 id from dbo.your_tablename where P_TypeId = 5)

虽然感觉有点像黑客。

正如其他答案所做的那样,如果需要,您还可以在查询中添加一个where子句。select top...

于 2013-01-27T19:12:09.647 回答