这应该是非常简单的我知道,但对于我的生活,我无法得到我的查询来做我需要的.
我希望找到那些有一定地位(所有行paid)按分组ref但前提是发现了超过1行.
这是我的示例表:
+-----+----------+----------+-------+
| id | deleted | status | ref |
+-----+----------+----------+-------+
| 1 | 0 | pending | 10001 |
| 2 | 0 | paid | 10001 |
| 3 | 0 | paid | 10001 |
| 4 | 0 | paid | 10002 |
| 5 | 1 | pending | 10002 |
| 6 | 1 | paid | 10002 |
| 7 | 0 | pending | 10003 |
| 8 | 0 | paid | 10003 |
| 9 | 0 | paid | 10003 |
| 10 | 0 | paid | 10003 |
| 11 | 0 | pending | 10004 |
| 12 | 0 | paid | 10004 |
| 13 | 1 | pending | 10005 |
| 14 | 1 | paid | 10005 |
| 15 | 1 | paid | 10005 |
| 16 | 0 | paid | 10005 |
| 17 | 0 | pending | 10006 |
| 18 | 0 | paid | 10006 |
| 19 | 0 | paid | 10006 |
+-----+----------+----------+-------+
Run Code Online (Sandbox Code Playgroud)
这是我的SQL:
SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,0,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)
由于ref有时包含附加数字,我需要通过SUBSTR进行匹配.
问题是我的查询返回了这个:
+-----+----------+---------+-------+
| id | deleted | status | ref |
+-----+----------+---------+-------+
| 2 | 0 | paid | 10001 |
+-----+----------+---------+-------+
Run Code Online (Sandbox Code Playgroud)
当我想它要返回ref小号10001,10003&10006.
任何人都可以帮我解决我做错的事吗?
谢谢
Max*_*erl 19
尝试
SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)
SUBSTR的position-argument以1开头,而不是0.
来自SUBSTR doc:
对于所有形式的SUBSTRING(),将从中提取子字符串的字符串中的第一个字符的位置计为1.
试试这个:
SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)