Я думаю, что вы неправильно поняли свои концепции SQL.
На самом деле получилось, что вы получили таблицу перекрестного соединения строк 3x3 = 9 с дублированными полями.
Ваше последнее предложение where является фиксированным результатом. Так что это означает, что MAX(b.filledqty) - MAX(a.filledqty)
оперируется в этой таблице из 9 строк. Конечно, оба максимальных значения одинаковы (то есть 1200). Результат равен нулю.
Если вы хотите найти разницу между максимальным значением и минимальным значением, попробуйте что-то вроде этого:
SELECT TOP 1 (b.filledqty - a.filledqty) AS filledtoday
FROM clientordermas a INNER JOIN clientordermas b ON (a.clordid=b.clordid)
WHERE a.clordid = '...'
ORDER BY a.filledqty, b.filledqty DESC
Этот запрос сначала выполняет внутреннее самостоятельное соединение, которое дублирует необходимый столбец, затем сортирует один столбец по возрастанию, а другой - по убыванию. Первая результирующая комбинация будет иметь максимальное и минимальное значения.
Если вы хотите найти разницу между максимальным значением и значением от второго до максимального, попробуйте следующее:
SELECT TOP 1 (b.filledqty - a.filledqty) AS filledtoday
FROM clientordermas a INNER JOIN clientordermas b ON (a.clordid=b.clordid)
WHERE a.filledqty <> b.filledqty (*this filters out max-max combo*)
WHERE a.clordid = '...'
ORDER BY a.filledqty DESC, b.filledqty DESC
Верхняя строка в результирующем наборе содержит значение max и second-to-max - значение second-to-max принимается за верхнее значение, которое не совпадает с max-значением.
Если вы хотите найти разницу между максимальным значением и верхним значением <1000, попробуйте следующее: </p>
SELECT TOP 1 (b.filledqty - a.filledqty) AS filledtoday
FROM clientordermas a INNER JOIN clientordermas b ON (a.clordid=b.clordid)
WHERE a.filledqty <> b.filledqty AND b.filledqty < 1000
WHERE a.clordid = '...'
ORDER BY a.filledqty DESC, b.filledqty DESC