我有兴趣学习一些(理想情况下)数据库无关的方法来从数据库表中选择第n行.看看如何使用以下数据库的本机功能实现这一目标也很有趣:
我目前正在SQL Server 2005中执行类似下面的操作,但我有兴趣看到其他更不可知的方法:
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000
Run Code Online (Sandbox Code Playgroud)
感谢上述SQL:Firoz Ansari的Weblog
更新:请参阅Troels Arvin关于SQL标准的答案.Troels,您有任何我们能引用的链接吗?
我的MySQL查询有问题.我的表有4列,看起来像这样:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
Run Code Online (Sandbox Code Playgroud)
id_users并且id_product是来自不同表的外键.
我想要的是只删除一行:
1 2 1 2013
Run Code Online (Sandbox Code Playgroud)
哪个出现两次,所以我只想删除它.
我试过这个查询:
delete from orders where id_users = 1 and id_product = 2
Run Code Online (Sandbox Code Playgroud)
但它会删除它们(因为它们是重复的).解决这个问题的任何提示?
我有这个查询与mysql:
select * from table1 LIMIT 10,20
Run Code Online (Sandbox Code Playgroud)
我怎么能用Microsoft sql做到这一点?
如何使用Rails的ActiveRecord销毁除最新的n条记录以外的所有记录?
我可以使用顺序和限制来获取最新的n条记录但是如何销毁反转?
我最近开始学习 SQL,现在被要求对表执行一个简单的删除,保留每个用户的最后 100 条记录。我正在研究将其存档的最佳方法(更有效的方法),并找到了一些可能的解决方案(SQL 查询:从表中删除除最新 N 之外的所有记录?,从 SQL 中的数据库表中删除除前 n之外的所有记录),但它是那种错综复杂的让我根据效率选择一个。所以我在这里寻求你的帮助。
这是我们保存用户访问日志的名为“访问”的表。
access:
- id (autoincrement) - primary
- userid (integer 11) - key
- refer (varchar 100)
- date (date/time)
Run Code Online (Sandbox Code Playgroud)
我的想法是每次同一用户进入系统时,就在插入新日志之前,从用户 ID 中删除旧记录。
我已经尝试了以下代码,但出现错误:此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”
DELETE FROM
access
WHERE
id NOT IN (
SELECT id FROM access WHERE userid = 10 ORDER BY id DESC LIMIT 100
);
Run Code Online (Sandbox Code Playgroud)
拜托,你能给我建议一些解决方案吗?谢谢!
我目前有PHP代码处理逻辑,因为我不知道如何在SQL中处理它.我想创建一个存储过程,删除除给定config_id的最新行之外的所有行.IE config_id = 5被传递给SP,因此它知道它要清理哪个config_id.
CREATE TABLE `TAA`.`RunHistory` (
`id` int(11) NOT NULL auto_increment,
`start_time` datetime default NULL,
`stop_time` datetime default NULL,
`success_lines` int(11) default NULL,
`error_lines` int(11) default NULL,
`config_id` int(11) NOT NULL,
`file_id` int(11) NOT NULL,
`notes` text NOT NULL,
`log_file` longblob,
`save` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
最新的将由start_time确定,如果stop_time为null但不是最新的应删除(如果运行被毫不客气地杀死,则stop_time可以为null).
我有一个mysql表,我需要在添加其他记录之前只包含20条最新记录.每天都会添加新行,因此我希望首先删除任何大于最早允许的记录.
该表包含一个自动增量"id"列,因此我可以轻松确定哪个是最早的记录.
谢谢你的帮助.
mysql ×5
sql ×3
activerecord ×1
database ×1
delete-row ×1
migration ×1
oracle ×1
postgresql ×1
sql-delete ×1
sql-server ×1