如何从下面的条目获得独特的结果?

时间:2014-05-21 11:59:41

标签: php mysql

plan_id | elementclass     | table_no   | ress_id | UserID     | Status
    1   | elementclass1    |          1 |   0     | 0006100022 |      N    
    1   | elementclass1    |          1 |   2     | 0006100022 |      N    
    1   | elementclass2    |          2 |   0     | 0006100021 |      N
    1   | elementclass4    |          3 |   0     | 0006100023 |      N 

在上面的行中我期待这样 如果row具有相同的elementclass,table_no但是在该条件下不同的ress_id只取非零的行。如果具有上述条件,则拖曳行为0可以占用任何行。如果两行都为非零,那么它也可以占用任何一行。 现在 对于其他人来说,它可以取值为0.我们可以将group by用于plan_id,因为可能有多个计划。

期望的结果

plan_id | elementclass     | table_no   | ress_id | UserID     | Status   
1   | elementclass1    |          1 |   2     | 0006100022 |      N    
1   | elementclass2    |          2 |   0     | 0006100021 |      N
1   | elementclass4    |          3 |   0     | 0006100023 |      N

请帮忙。

感谢

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT T1.* 
FROM TableName T1 JOIN
 (SELECT elementclass,table_no,MAX(ress_id) as ress_id
  FROM TableName
  GROUP BY elementclass,table_no
 )T2 ON T1.elementclass=T2.elementclass AND T1.table_no=T2.table_no AND T1.ress_id=T2.ress_id

<强>解释

这里,我们正在为每个elementclass和table_no创建一个临时表T2,其最大值为ress_id。然后我们将这个表与包含这3个字段的原始表连接起来,并从原始表T1中选择所有记录。

结果:

PLAN_ID  ELEMENTCLASS   TABLE_NO    RESS_ID   USERID        STATUS
-------------------------------------------------------------------
1        elementclass1  1           2         0006100022    N
1        elementclass2  2           0         0006100021    N
1        elementclass4  3           0         0006100023    N

请参阅SQL Fiddle中的结果。

答案 1 :(得分:0)

SELECT * FROM  TableName a  
WHERE a.ress_id = (SELECT MAX(b.ress_id) FROM TableName b WHERE b.table_no = a.table_no) 
GROUP BY a.plan_id,a.table_no

这会给你:

  • 每个plai_id和table_no

  • 的结果为1
  • 每个结果中都有最大的ress_id

答案 2 :(得分:0)

首先获取每个元素类的最大ress id。然后选择相关记录。可能有重复。因此按元素类和ress id分组。

以下陈述并不完全符合您的要求,但也许就足够了。如果出现平局,您将无法获得其中一条记录,但其中一条记录是&#39; 计划ID ,其中一个记录&#39; table nos ,其中一条记录&#39; 用户ID 和其中一条记录&#39; statusses 。因此,当elementclass和ress_id相等时,可以从一个记录获取用户id,从另一个记录获取状态。

select plan_id, mytable.elementclass, table_no, mytable.ress_id, userid, status
from mytable
join
(
  select elementclass, max(ress_id) as max_ress_id
  from mytable
  group by elementclass
) agg on agg.elementclass = mytable.elementclass and agg.max_ress_id = mytable.res_id
group by mytable.elementclass, mytable.ress_id;

(如果有关系,可以编写一个语句来访问完整的记录,但这要复杂得多 - 至少在MySQL中。)