使用mysql“search until”,并记住https://stackoverflow.com/a/45029807/5807146,我得到了正确排序的结果:
SELECT * FROM table, (SELECT @until_var := NULL) _until
WHERE ISNULL(@until_var := IF(value = 100, value, @until_var))
ORDER BY value DESC
下一步我需要的(而且没有成功)是计算订购数量:
SELECT COUNT(*) FROM table, (SELECT @until_var := NULL) _until
WHERE ISNULL(@until_var := IF(value = 100, value, @until_var))
ORDER BY value DESC
它总是返回founds的计数,而不考虑 ORDER BY
.
示例:在db where列中 id
是主索引,列 date
可能是任何东西,我正试图让mysql从日期最高的条目中计数:
id | value | date
----|-------|----------
1 | A | mar
2 | A | jan
3 | A | apr
4 | B | feb
SELECT COUNT(*) FROM table, (SELECT @until_var := NULL) _until
WHERE value = "A" AND ISNULL(@until_var := IF(id = 4, value, @until_var))
ORDER BY date DESC
达到预期效果:
id | value | date
----|-------|----------
3 | A | apr
1 | A | mar
= 2
我目前(慢)的解决办法是得到列 id
,然后计算结果。。。但这很慢。目标是尽可能快。
谢谢
2条答案
按热度按时间ulydmbyx1#
我不确定我是否明白,你想要什么。但从你的例子来看
可能就是你要找的(你得用合适的字体
date
但是,由于月份名称的字符串不会在相应月份的数字之后排序。或者使用Map表将值Map到定义顺序的整数。)tvokkenx2#
如果我对你的理解是正确的,那么我建议你举个例子:
它首先获取所有结果,然后对它们进行排序,然后获取(计数)所有结果,直到到达目标id为止。它确实比没有
HAVING
条款,但它是有效的。