Mysql 基于 GROUP 列的 LIMIT 结果

标签 mysql limit

我正在寻找问题的解决方案,遗憾的是我找不到。所以也许有人可以在这里提供帮助。

我有一个当前查询,它将根据某个用户总结标识符的总频率。这是查询

SELECT trk_sum.user_id,trk_sum.trk_data_identifier, trk_sum.trk_data_type, trk_sum.trk_date,MAX(sum_data_frequency)
FROM (
    SELECT
    user_id,trk_data_identifier, trk_data_type, trk_date,sum(trk_data_frequency) as sum_data_frequency
    FROM user_tracker_data 
    WHERE user_id = '37557'
    GROUP BY CONCAT(trk_data_type , trk_data_identifier)
    ORDER BY trk_date DESC ,trk_data_type ASC  , sum_data_frequency DESC
) trk_sum 
GROUP BY trk_sum.trk_data_type
    ORDER BY trk_sum.trk_date DESC ,trk_sum.trk_data_type ASC

它会产生这样的结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
  <head>
    <title>user_tracker_data</title>
    <meta name="GENERATOR" content="HeidiSQL 9.3.0.4984">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
      thead tr {background-color: ActiveCaption; color: CaptionText;}
      th, td {vertical-align: top; font-family: "Tahoma", Arial, Helvetica, sans-serif; font-size: 8pt; padding: 3px; }
      table, td {border: 1px solid silver;}
      table {border-collapse: collapse;}
      thead .col0 {width: 65px;}
      thead .col1 {width: 117px;}
      thead .col2 {width: 109px;}
      thead .col3 {width: 91px;}
      thead .col4 {width: 159px;}
      .col4 {text-align: right;}
    </style>
  </head>

  <body>

    <table caption="user_tracker_data (10 rows)">
      <thead>
        <tr>
          <th class="col0">user_id</th>
          <th class="col1">trk_data_identifier</th>
          <th class="col2">trk_data_type</th>
          <th class="col3">trk_date</th>
          <th class="col4">MAX(sum_data_frequency)</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">ACCO 1850D</td>
          <td class="col2">advert_model</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">12</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">741</td>
          <td class="col2">category_id</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">13</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">9</td>
          <td class="col2">industry_id</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">22</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">7081</td>
          <td class="col2">make_id</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">12</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">44759</td>
          <td class="col2">model_id</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">12</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">4305</td>
          <td class="col2">post_code</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">12</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">QLD</td>
          <td class="col2">state</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">23</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">1093</td>
          <td class="col2">subcategory_id</td>
          <td class="col3">2015-10-28</td>
          <td class="col4">13</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">Australia</td>
          <td class="col2">country</td>
          <td class="col3">2015-09-27</td>
          <td class="col4">61</td>
        </tr>
        <tr>
          <td class="col0">37557</td>
          <td class="col1">test</td>
          <td class="col2">keywords</td>
          <td class="col3">2015-06-27</td>
          <td class="col4">3</td>
        </tr>
         <tr>
          <td class="col0">37557</td>
          <td class="col1">ACCO 1850D</td>
          <td class="col2">advert_model</td>
          <td class="col3">2015-01-28</td>
          <td class="col4">12</td>
        </tr>
      </tbody>
    </table>

    <p>
      <em>generated 2015-10-29 08:27:35      by <a href="http://www.heidisql.com/">HeidiSQL 9.3.0.4984</a></em>
    </p>

  </body>
</html>

我想做的最后一件事是获取最新的 15 个唯一 trk_date。请注意,我不希望它像“前 15 天”,但它应该像包含多行的前 15 个日期点。正如您所看到的,记录底部的 trk_date 中有一个间隙

最佳答案

您可以将原始查询JOIN到包含数据集中出现的最近 15 个日期的临时表。连接操作充当过滤器,为您提供所需的结果。

SELECT trk_sum.user_id,trk_sum.trk_data_identifier, trk_sum.trk_data_type, trk_sum.trk_date,MAX(sum_data_frequency)
FROM (
    SELECT
    user_id,trk_data_identifier, trk_data_type, trk_date,sum(trk_data_frequency) as sum_data_frequency
    FROM user_tracker_data 
    WHERE user_id = '37557'
    GROUP BY CONCAT(trk_data_type , trk_data_identifier)
    ORDER BY trk_date DESC ,trk_data_type ASC  , sum_data_frequency DESC
) trk_sum
INNER JOIN
(
    SELECT DISTINCT trk_date FROM user_tracker_data
    ORDER BY trk_date DESC
    LIMIT 15
) t
ON trk_sum.trk_date = t.trk_date
GROUP BY trk_sum.trk_data_type
ORDER BY trk_sum.trk_date DESC ,trk_sum.trk_data_type ASC

关于Mysql 基于 GROUP 列的 LIMIT 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404025/

相关文章:

mysql - 应用程序中 Azure WebApp MySQL 的默认用户名密码是什么

mysql - MYSQL/2小时如何显示数据日期

php - 如何在laravel excel中增加行限制导出excel

django - 在管理员的内联表单中限制选择中的外键选择

MySQL:高效地返回组不为空的分组字段

python - 我收到错误 'except MySQLdb.error, e' 语法错误 - 尝试将我的 scrapy 蜘蛛写入 mysql 时语法无效,

mysql - 如何更改在 MAMP 上运行的 Django 项目数据库名称?

mysql - 在没有分组依据但有子查询的情况下获取总和

mysql - 检查带有 LIMIT 的 SELECT 语句是否返回所有行

perl - Perl 中的最大整数