Sql 如何按insert sequence DESC排序数据?
我有一个表:TestTable,这个表只有一个字段:value,我插入相同的数据:Sql 如何按insert sequence DESC排序数据?,sql,mysql,Sql,Mysql,我有一个表:TestTable,这个表只有一个字段:value,我插入相同的数据: value ------------ ccc aa 111 bbb ------------ 我运行: select * from TestTable 可以通过以下方式显示我的结果顺序: ccc aa 111 bbb 现在,我想得到这个结果描述: bbb 111 aa ccc 如何创建此sql select * from TestTable order by (by what?) DESC 谢谢你 or
value
------------
ccc
aa
111
bbb
------------
我运行:
select * from TestTable
可以通过以下方式显示我的结果顺序:
ccc
aa
111
bbb
现在,我想得到这个结果描述:
bbb
111
aa
ccc
如何创建此sql
select * from TestTable order by (by what?) DESC
谢谢你 order语句中没有可以使用的自动“创建订单”标识符。您应该使用auto_increment
列对记录进行编号。然后可以按该列排序
order语句中没有可以使用的自动“创建订单”标识符。您应该使用auto_increment
列对记录进行编号。然后可以按该列排序
您喜欢这项工作吗
SELECT @rownum := @rownum +1 `rank`,
T.*
FROM TestTable T,
( SELECT @rownum :=0 ) T
ORDER BY `rank` DESC
你喜欢这个工作吗
SELECT @rownum := @rownum +1 `rank`,
T.*
FROM TestTable T,
( SELECT @rownum :=0 ) T
ORDER BY `rank` DESC
听起来您想使用自定义排序顺序进行排序。我想到了两种方法:1)将排序顺序放在表中,并在查询中使用该表;2) 使用带分隔符的字符串(假设域中的值数量小、稳定,且值的宽度类似且“窄”) 请原谅SQL Server语法过于标准,希望您能大致了解: e、 g.1
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
),
MyDomainWithSortOrder (domain_col, sort_seq)
AS
(
SELECT ID, domain_col
FROM (
VALUES ('bbb', 1),
('111', 2),
('aa', 3),
('ccc', 4)
) AS MyDomainWithSortOrder (ID, domain_col)
)
SELECT T1.ID, T1.data_col, D1.sort_seq
FROM MyTable AS T1
INNER JOIN MyDomainWithSortOrder AS D1
ON T1.data_col = D1.domain_col
ORDER
BY sort_seq;
e、 g.2
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
)
SELECT ID, data_col
FROM MyTable
ORDER
BY CHARINDEX(CAST(data_col + ' ' AS CHAR(3)), 'bbb111aa ccc');
听起来您想使用自定义排序顺序进行排序。我想到了两种方法:1)将排序顺序放在表中,并在查询中使用该表;2) 使用带分隔符的字符串(假设域中的值数量小、稳定,且值的宽度类似且“窄”) 请原谅SQL Server语法过于标准,希望您能大致了解: e、 g.1
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
),
MyDomainWithSortOrder (domain_col, sort_seq)
AS
(
SELECT ID, domain_col
FROM (
VALUES ('bbb', 1),
('111', 2),
('aa', 3),
('ccc', 4)
) AS MyDomainWithSortOrder (ID, domain_col)
)
SELECT T1.ID, T1.data_col, D1.sort_seq
FROM MyTable AS T1
INNER JOIN MyDomainWithSortOrder AS D1
ON T1.data_col = D1.domain_col
ORDER
BY sort_seq;
e、 g.2
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
)
SELECT ID, data_col
FROM MyTable
ORDER
BY CHARINDEX(CAST(data_col + ' ' AS CHAR(3)), 'bbb111aa ccc');
+1似乎是唯一的方法,它不可能将自定义排序提供程序注入到SQL中-因此无法在相关列上实现目标排序。还有其他想法吗?我没有“订单字段”,也不想为订单添加一个自动增量字段。你必须这样做,Zenofo。除非有order by子句,否则任何select语句的结果顺序都是未定义的,为此,您需要将“正确”顺序存储在某个地方。@Zenofo,您需要了解,不使用
order by
时获得的默认顺序是不保证的,所以你不能将其倒置。但是如果我们有应用程序级生成的主键,而没有自动增量
列,那该怎么办?+1似乎是唯一的方法,它不可能将自定义排序提供程序注入到SQL中-因此无法在相关列上实现目标排序。还有其他想法吗?我没有“订单字段”,也不想为订单添加一个自动增量字段。你必须这样做,Zenofo。除非有order by子句,否则任何select语句的结果顺序都是未定义的,为此,您需要将“正确”顺序存储在某个地方。@Zenofo,您需要了解,不使用order by
时获得的默认顺序是不保证的,所以你不能反转它。但是如果我们有应用程序级生成的主键,而没有自动增量
列,那该怎么办呢?最好解释,最好解释