我有一个表格,表示较新的数据以id=1
开头并增加id
,我们得到旧数据,现在问题是,因为每天都会添加新数据,我想要要显示从新到旧的结果,会出现问题。我希望颠倒表的顺序,即使添加了新数据,我也可以显示从较新数据到较旧数据的数据。
有谁知道我应该怎么做?
答案 0 :(得分:1)
您可以对切换发生时的任意数字进行硬编码。假设你现在有1000行(所以#1是最新的,但#1001将是添加时最新的):
SELECT (CASE WHEN id < 1000 THEN id * -1 ELSE id END) AS sort_order
ORDER BY sort_order DESC
可能更好的解决方案是添加时间戳列,因为依靠自动生成的列来获取真实数据并不好。
修改强>
要创建新表,请使用上面的插入。
INSERT INTO [new_table] (col1,col2,col3, ...)
SELECT (col1, col2, col3, ...)
FROM [old_table]
ORDER BY (CASE WHEN id < 1000 THEN id * -1 ELSE id END) DESC
答案 1 :(得分:1)
最好在表格中添加datetime
字段。
但是,您的ID不能直接用作订单字段,因为直到现在ID = 1是最新的,但是从现在开始,每个新记录都会获得比X更高的ID。因此,您需要识别X,这是ID的值。迄今为止最古老的记录然后您可以通过两种情况订购:
以下是X=10
:
SELECT ID
FROM dbo.tbl
ORDER BY CASE WHEN ID <=10 THEN ID ELSE -ID END ASC
这是小提琴:http://sqlfiddle.com/#!6/95c9a/3/0
但我想将内容复制到新表中,这样我就不需要了 以不同的方式对待它们
然后你可以使用上面的sql按顺序插入新表。我会在ID
使用新的IDENTITY(1,1)
列:
INSERT INTO dbo.tblCopy
SELECT ID
FROM dbo.tbl
ORDER BY CASE WHEN ID <=10 THEN ID ELSE -ID END ASC
如果您不想添加其他列,并且想要重复使用旧ID,则可以使用上面ROW_NUMBER
的{{1}}:
CASE