SQL获得最大和最小之间的最小差异

时间:2018-10-30 19:34:31

标签: mariadb

我正在尝试找到差异最小的符号。但是我不知道该怎么做才能找到区别以比较两者。

我有这个设置:

+------+------+-------------+-------------+--------------------+------+--------+
| clid | cust | Min         | Max         | Difference         | Qty  | symbol |
+------+------+-------------+-------------+--------------------+------+--------+
|  102 | C6   |        11.8 |       12.72 | 0.9199999999999999 | 1500 | GE     |
|  110 | C3   |          44 |   48.099998 |  4.099997999999999 | 2000 | INTC   |
|  115 | C4   |     1755.25 | 1889.650024 | 134.40002400000003 | 2000 | AMZN   |
|  121 | C9   |       28.25 |       30.27 | 2.0199999999999996 | 1500 | BAC    |
|  130 | C7   |     8.48753 |    9.096588 |  0.609058000000001 | 5000 | F      |
|  175 | C3   |        6.41 |        7.71 | 1.2999999999999998 | 1500 | SBS    |
|  204 | C5   |        6.41 |        7.56 | 1.1499999999999995 | 5000 | SBS    |
|  208 | C2   | 1782.170044 | 2004.359985 |  222.1899410000001 | 5000 | AMZN   |
|  224 | C10  |  153.350006 |  162.429993 |  9.079986999999988 | 1500 | FB     |
|  269 | C6   |  355.980011 |  392.299988 | 36.319976999999994 | 2000 | BA     |
+------+------+-------------+-------------+--------------------+------+--------+

到目前为止,我有这个查询

select d.clid, 
       d.cust, 
       MIN(f.fillPx) as Min, 
       MAX(f.fillPx) as Max, 
       MAX(f.fillPx)-MIN(f.fillPx) as Difference, 
       d.Qty, 
       d.symbol 
from orders d 
  inner join mp f on d.clid=f.clid 
group by f.clid 
having SUM(f.fillQty) < d.Qty 
order by d.clid;

我缺少什么,以便可以比较最小值和最大值并获得最小的不同符号?

mp表:

+------+------+--------+------+------+---------+-------------+--------+
| clid | cust | symbol | side | oQty | fillQty | fillPx      | execid |
+------+------+--------+------+------+---------+-------------+--------+
|  123 | C2   | SBS    | SELL | 5000 |     273 |        7.37 |      1 |
|  157 | C9   | C      | SELL | 1500 |     167 |   69.709999 |      2 |
|  254 | C9   | GE     | SELL | 5000 |     440 |       13.28 |      3 |
|  208 | C2   | AMZN   | SELL | 5000 |     714 | 1864.420044 |      4 |
|  102 | C6   | GE     | SELL | 1500 |     136 |       12.32 |      5 |
|  160 | C7   | INTC   | SELL | 1500 |     267 |        44.5 |      6 |
|  145 | C10  | GE     | SELL | 5000 |     330 |       13.28 |      7 |
|  208 | C2   | AMZN   | SELL | 5000 |    1190 | 1788.609985 |      8 |
|  161 | C1   | C      | SELL | 1500 |     135 |   72.620003 |      9 |
|  181 | C5   | FCX    | BUY  | 1500 |      84 |   12.721739 |     10 |

订单表:

+------+------+--------+------+------+
| cust | side | symbol | qty  | clid |
+------+------+--------+------+------+
| C1   | SELL | C      | 1500 |  161 |
| C9   | SELL | INTC   | 2000 |  231 |
| C10  | SELL | BMY    | 1500 |  215 |
| C1   | BUY  | SBS    | 2000 |  243 |
| C4   | BUY  | AMZN   | 2000 |  226 |
| C10  | BUY  | C      | 1500 |  211 |

1 个答案:

答案 0 :(得分:0)

如果需要一个符号,可以使用order bylimit

select d.clid, 
       d.cust, 
       MIN(f.fillPx) as Min, 
       MAX(f.fillPx) as Max, 
       MAX(f.fillPx)-MIN(f.fillPx) as Difference, 
       d.Qty, 
       d.symbol 
from orders d join
     mp f
     on d.clid = f.clid 
group by d.clid, d.cust, d.Qty, d.symbol
having SUM(f.fillQty) < d.Qty 
order by difference
limit 1;

请注意,我将其余未聚合的列添加到group by