我的查询是这样的:-
SELECT m.allocationID,mt.CatId,mt.CatSName
FROM msttransaction m,msttemp mt WHERE m.isPending='Y'
AND m.allocationID IN (
SELECT mt.AllocationId FROM msttemp WHERE mt.quarterId='010100001'
) ORDER BY SUBSTRING(m.AllocationId, -14)
输出:-
12980013120170919125006 1 A
12980013320170919125404 3 C
12980013420170919125603 4 D
12980013820170919130113 2 B
12980013920170919130315 3 C
12980014020170919130519 4 D
12980013220170919130613 2 B
12980013720170919130722 1 A
在 129800
系列中,最后 14 位数字是日期和时间。首先,我必须根据 1 2 3 4 1 2 3 4
对我的输出进行排序,但首先它会检查同一 catId 的 129800
的最后 14 位数字,先到先到。
预期输出
12980013120170919125006 1 A
12980013820170919130113 2 B
12980013320170919125404 3 C
12980013420170919125603 4 D
12980013720170919130722 1 A
12980013220170919130613 2 B
12980013920170919130315 3 C
12980014020170919130519 4 D
最佳答案
这样行吗?
ORDER BY m.CatId, SUBSTRING(m.AllocationId, -14)
要点是首先按 CatId
排序,然后按 AllocationId
中嵌入的数据戳排序。
如果是我,我会更正式地处理日期戳顺序,通过从您的字符串中正式提取它 using STR_TO_DATE() like this .这不是绝对必要的,但无论如何都是很好的做法。
ORDER BY m.CatId, STR_TO_DATE(SUBSTRING(m.AllocationId, -14), '%Y%m%d%H%i%s'))
另外,你可以像这样使用日期操作
ORDER BY m.CatId, LAST_DAY(STR_TO_DATE(SUBSTRING(m.AllocationId, -14), '%Y%m%d%H%i%s')))
将一个月内的所有日期戳收集在一起用于订购,或类似的事情。
关于php - 我想按 1 2 3 4 1 2 3 4 的顺序对我的 CatId 进行排序,但有一个问题,如果 catid 相同,它首先检查 allocationId 最后 14 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363346/