Mysql 尝试获取列值作为范围

Mysql 尝试获取列值作为范围,mysql,Mysql,我正在使用mysql5.7.19使用pos机打印卡片。表sales有序列号、pos机号和卡金额的列表。我想获得特定pos机按卡金额分组出售的序列号的范围 我想得到位置号ps1的所有范围 我想要的结果是: |range | card_amt|pos_no| |100-102| 10 | ps1 | |107-109| 10 | ps1 | |111 | 5 | ps1 | 我假设您预期结果中111的卡金额应该是10。我采纳了你上一个问题的答案

我正在使用mysql5.7.19使用pos机打印卡片。表sales有
序列号
pos机号
卡金额
的列表。我想获得特定pos机按
卡金额分组出售的
序列号
的范围

我想得到位置号ps1的所有范围

我想要的结果是:

|range  | card_amt|pos_no|

|100-102|   10    | ps1  |

|107-109|   10    | ps1  |

|111    |   5     | ps1  |

我假设您预期结果中111的卡金额应该是10。我采纳了你上一个问题的答案:

select dn.serial_no as dnval, min(up.serial_no) as upval, dn.card_amt, dn.pos_no  
from sales up
join sales dn
    on dn.serial_no <= up.serial_no
    and dn.pos_no = up.pos_no
    and dn.card_amt = up.card_amt
where not exists (
    select 1 from sales a 
    where a.serial_no = up.serial_no + 1 
    and a.pos_no = up.pos_no
    and a.card_amt = up.card_amt
)
and not exists (
    select 1 from sales b 
    where b.serial_no = dn.serial_no - 1 
    and b.pos_no = dn.pos_no
    and b.card_amt = dn.card_amt
)
group by dn.pos_no, dn.serial_no, dn.card_amt
order by dn.pos_no, dn.serial_no;
选择dn.serial\u no作为dnval,选择min(up.serial\u no)作为upval,选择dn.card\u amt,选择dn.pos\u no
从销售额上升
加入销售dn

在dn.serial_no上,为什么第一个结果是100-103?源表中没有102。您使用的是MySQL版本>=8吗?这将对windows的可能性有很大帮助functions@ThomasG对不起,我想插入102。现在修好了。我也在使用mysql5.7.19,例如,如果101的card_amount更改为3,结果会是什么?@Lennart它将出现在100和102的两行中