Допустим, у меня есть следующая таблица:
| ... | orderId | serialNumber | type | ... |
|-----|---------|--------------|---------------|-----|
| ... | 1 | 01 | someType | ... |
| ... | 1 | 02 | someType | ... |
| ... | 1 | 03 | someOtherType | ... |
| ... | 1 | 04 | someOtherType | ... |
| ... | 1 | 05 | someType | ... |
| ... | 1 | 06 | someType | ... |
| ... | 2 | 07 | someType | ... |
| ... | 2 | 08 | someType | ... |
Я хочу, чтобы мой запрос выдал следующий результат:
| orderId | count | min | max | type |
|---------|-------|-----|-----|---------------|
| 1 | 2 | 01 | 02 | someType |
| 1 | 2 | 03 | 04 | someOtherType |
| 1 | 2 | 05 | 06 | someType |
| 2 | 4 | 07 | 08 | someType |
Я хочу группы по типу и orderId. Если serialNumber не выполняется, должна быть создана новая запись.
Это мой текущий запрос:
SELECT
orderId,
count(*) AS count,
min(serialNumber) AS min,
max(serialNumber) AS max,
type
FROM tblMyTable
group by type, orderId
order by orderId
но результат, который он создает, неверен:
| orderId | count | min | max | type |
|---------|-------|-----|-----|---------------|
| 1 | 4 | 01 | 06 | someType | <-- this should be 2 entries
| 1 | 2 | 03 | 04 | someOtherType |
| 2 | 2 | 07 | 08 | someType |
Как вы можете видеть, он не обнаруживает, что serialNumber 03 и 04 относится к другому описанию. Это приводит к неправильному счету и максимальному значению.
Я не знаю, как добавить критерий, который проверяет непрерывный серийный номер.
EDIT:
Также могут встречаться отдельные записи, такие как:
| orderId | count | min | max | type |
|---------|-------|-----|-----|---------------|
| 1337 | 1 | 10 | 10 | someNewType |