是否可以在MySQL中创建以下动态SQL查询?

时间:2019-07-10 06:26:48

标签: mysql sql group-by

给出此sells表(在MySQL中):

id | person   | state | amount
 1 |  Ringo   |   CA  |  3$
 2 |  Paul    |   CA  |  10$
 3 |  John    |   MA  |  2$
 4 |  Ringo   |   CA  |  6%   
 5 |  Ringo   |   MA  |  12$  

我们想创建一个SQL,以获取每个州person最新金额-诸如此类:

person | CA  |  MA 
 Ringo |  6$ |  12$
 Paul  |  10$|   -
 John  |   - |  2$

我们也希望此查询具有足够的动态性,因此,如果有一条具有新状态(例如TX)的新记录,我们将自动获取它。

6 | George  | TX | 15$

将导致:

person | CA  |  MA   | TX
 Ringo |  6$ |  12$  | -
 Paul  |  10$|   -   | -
 John  |   - |  2$   | -
 George|   - |  -    | 15$

我们对此查询尝试了Group by

select * from sells where id in(
   select max(id) from sells 
   group by person, state
 )

这似乎为我们提供了正确的数据,但是我们需要帮助以实现所需结果的飞跃

1 个答案:

答案 0 :(得分:0)

您可能可以使用更简单的SQL来获取所需的所有数据,并在应用程序代码中进一步格式化以获取所需的格式。

一个人在每种状态下所花的一行表格:

id | person   | state | amount
 4 |  Ringo   |   CA  |  6$
 5 |  Ringo   |   MA  |  12$  
 2 |  Paul    |   CA  |  10$
 3 |  John    |   MA  |  2$

SQL查询:

SELECT id, person, state, amount
FROM sells
GROUP BY person, state
HAVING id = MAX(id)