2017-01-16 78 views
0

我有一张表可以返回这些结果。当ID相同时获取所有数据的查询

ProcessID AddressID ItemStateID 
22    2   50 
22    3   50 
22    4   50 
22    5   50 
22    6   50 
22    7   60 
22    7   50 
22    8   50 
22    9   50 
22    10   60 
22    10   50 
22    11   50 
22    12   50 

但我想是这样的:

ProcessID AddressID ItemStateID 
22    2   50 
22    3   50 
22    4   50 
22    5   50 
22    6   50 
22    7   60 
22    8   50 
22    9   50 
22    10   60 
22    11   50 
22    12   50 

当AddressID是一样的,我想拿到最高ItemStateID一行...

现在这是查询我目前正在使用:

SELECT DISTINCT 
    ProcessID, 
    AddressID, 
    ItemStateID 
FROM MMResult2 
WHERE ProcessID = 22 AND ItemStateID > 10 
ORDER BY AddressID ASC, ItemStateID DESC 
+0

使用'集团通过AddressID'和'MAX(ItemStateID)' –

回答

2

删除distinct并按您想要的列组 独特。要聚合的最后一列使用max()

SELECT ProcessID, 
     AddressID, 
     max(ItemStateID) as MaxItemStateID 
FROM MMResult2 
WHERE ProcessID = 22 
    AND ItemStateID > 10 
GROUP BY ProcessID, 
     AddressID 
ORDER BY AddressID ASC, 
     max(ItemStateID) DESC 
+0

这是谁的工作最好的和漂亮的解释之一,非常感谢你。 – Pedro

0

您可以使用GROUP BY

SELECT 
    ProcessID, 
    AddressID, 
    MAX(ItemStateID) 
FROM MMResult2 
WHERE ProcessID = 22 AND ItemStateID > 10 
GROUP BY AddressID 
0

使用GROUP BYMAX功能。

SELECT DISTINCT ProcessID, AddressID, MAX(ItemStateID) AS HighestItemStateID 
FROM MMResult2 
WHERE ProcessID = 22 AND ItemStateID > 10 
GROUP BY ProcessID, AddressID, 
ORDER BY AddressID ASC, ItemStateID DESC 
0
SELECT 
    ProcessID, 
    AddressID, 
    MAX(ItemStateID) AS ItemStateID 
FROM MMResult2 
WHERE ProcessID = 22 AND ItemStateID > 10 
GROUP BY ProcessID, AddressID 
ORDER BY AddressID ASC, ItemStateID DESC 
相关问题