Хорошо, поэтому я нашел решение. Спасибо Андреасу, который сказал мне, что моя проблема связана с смещением . Таким образом, решение заключается в добавлении _pack_ = 1
к такой структуре.
class FILE_HEAD(ctypes.Structure):
_pack_ = 1
_fields_ = [
("name", ctypes.c_char * 4), # 4 bytes
("size", ctypes.c_int), # 4 bytes
("Cal_l", ctypes.c_double), # 8 bytes
("Cal_r", ctypes.c_double), # 8 bytes
("Speed_ChL", ctypes.c_byte), # 1 byte
("Speed_Pulses_ChL", ctypes.c_int), # 4 bytes
("Speed_factor_ChL", ctypes.c_double), # 8 bytes
("Quantity_ChL", ctypes.c_char * 3), # 3 bytes
("Description_ChL", ctypes.c_char * 32), # 32 bytes
("Unit_ChL", ctypes.c_char * 8), # 8 bytes
("Speed_ChR", ctypes.c_byte), # 1 byte
("Speed_Pulses_ChR", ctypes.c_int), # 4 bytes
("Speed_factor_ChR", ctypes.c_double), # 8 bytes
("Quantity_ChR", ctypes.c_char * 3), # 3 bytes
("Description_ChR", ctypes.c_char * 32), # 32 bytes
("Unit_ChR", ctypes.c_char * 8) # 8 bytes
] # = 136 bytes
Вам необходимо сначала упорядочить по номеру вхождения desc
и по номеру строки по asc
.
select name,rn
from
(
select name,row_number() over(partition by name order by name) rn ,
count(*) over(partition by name) ct
from tbl_dup
) a
order by ct desc, rn asc
Попробуйте использовать COUNT
в качестве аналитической функции в предложении ORDER BY
:
SELECT name, ROW_NUMBER() OVER (PARTITION by name ORDER BY name) rn
FROM tbl_dup
ORDER BY COUNT(*) OVER (PARTITION BY name) DESC, rn;