0
  • 我需要具有attributeId 和attribute 值的最新添加的三个值,但不同的不会对两者都起作用。我的要求主要是attributeValue,但具有不同的最新添加的attributeId。下面是我的查询.. 有什么解决方案吗?

      SELECT DISTINCT  attributeValue 
      FROM user_trans_service_selection 
      ORDER BY uniqueId DESC LIMIT 0,3
    

下面是我的桌子

  • uniqueId - attributeId - attributeValue
  • 1 - 101 - 6700
  • 2 - 102 - 受雇
  • 3 - 103 - 城市
  • 4 - 101 - 8900
  • 5 - 102 - 受雇
  • 6 - 102- 学生
  • 7 - 103 - 镇
  • 8 - 103 - 村庄

我希望结果为:

  • 属性 ID - 属性值
  • 101 - 8900
  • 102 - 学生
  • 103 - 村庄
4

4 回答 4

4

有点类似于戈登林诺夫的回答。在 sql server 中你不使用 LIMIT

sqlfiddler

select utss.attributeid, utss.attributeValue
from user_trans_service_selection utss 
    inner join
     (select top 3 attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
      order by max(uniqueid)
     ) attr
     on attr.maxid = utss.uniqueid
于 2012-10-05T22:38:14.957 回答
2

//我们将为此使用 GROUP BY 函数

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

// 按照这些 V 步骤 {A, B 和 C} 为每个 [attributeId] 查找最后添加的记录 // {A} 为每个 [attributeId] 查找最后添加的记录(例如最高 [uniqueId])

SELECT attributeId, max(uniqueId)
FROM table_name
GROUP BY attributeId

// {B} 我们稍后会将此结果嵌套在最终查询的 where 子句中,但首先我们必须去掉 [attributeId]

SELECT uniqueId
FROM( SELECT attributeId, max(uniqueId)
      FROM table_name
      GROUP BY attributeId)

// {C} 现在我们可以创建最终查询并从表 [table_name] 中选择我们需要的内容。在此查询的 WHERE 子句中,我们可以放置一个过滤器,仅显示我们在 {B} 中找到的那些 id 的信息

SELECT uniqueId, attributeId, attributeValue
FROM table_name
WHERE attributeId IN (    SELECT attributeId
              FROM(   SELECT attributeId, max(uniqueId)
          FROM table_name
          GROUP BY attributeId))
于 2012-10-05T22:39:46.190 回答
2

您想要的是每个属性具有最高 id 的行。你需要加入才能得到这个:

select utss.attributeid, utss.attributeValue
from user_trans_service_selection utss join
     (select attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
     ) attr
     on attr.maxid = utss.id
order by maxid desc
limit 0, 3
于 2012-10-05T21:47:33.780 回答
0

最后完全没有错误的工作代码如下:

     select utss.attributeid, utss.attributeValue
     from user_trans_service_selection utss 
      inner join
     (select attributeid, max(uniqueid) as maxid
      from user_trans_service_selection
      group by attributeid
      order by max(uniqueId) desc limit 0,3
     ) attr
     on attr.maxid = utss.uniqueid

感谢大家 !!!

于 2012-10-06T00:10:39.397 回答