如何使用join语句按desc排序?

mm5n2pyu  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(435)

我有这样一个问题:

  1. SELECT
  2. result.ip,
  3. ips.ipStatus,
  4. result.quantity,
  5. result.clickDates,
  6. FROM
  7. ips
  8. INNER JOIN
  9. (
  10. SELECT
  11. visits.ip,
  12. count(visits.ip) AS quantity,
  13. GROUP_CONCAT(clicks.clickDate) AS clickDates,
  14. FROM
  15. visits
  16. INNER JOIN
  17. clicks
  18. ON visits.id = clicks.id
  19. WHERE
  20. clicks.clickDate BETWEEN 1 AND 10
  21. GROUP BY
  22. visits.ip
  23. ORDER BY
  24. null
  25. ) AS result
  26. ON ips.ip = result.ip LIMIT 6, 2

它生成如下结果表:

  1. ip | status | quantity | date
  2. 1.1.1.1 ok 3 555, 557, 558
  3. 2.2.2.2 ok 1 657

我的日期存储在.ms(bigint)中。我的目标是 ORDER BY 日期 DESC . 我想知道最新的ips将在顶部。所以我想改变 ORDER BYORDER BY clicks.clickDate DESC . 但它给了我一个错误:
order by子句的表达式#1不在group by子句中,并且包含未聚合的列
所以我有两个问题:
有没有可能 ORDER BY 如果我使用 GROUP_CONCAT 单击。单击日期列?也许有一种方法可以只显示最后一个值 GROUP_CONCAT 点击。点击日期?

rqqzpn5f

rqqzpn5f1#

你可以尝试添加 order byGROUP_CONCAT 并添加一列 MAX(clicks.clickDate) 得到 clickDate 组中的最大值,用于主查询 order by .

  1. SELECT
  2. result.ip,
  3. ips.ipStatus,
  4. result.quantity,
  5. result.clickDates,
  6. FROM
  7. ips
  8. INNER JOIN
  9. (
  10. SELECT
  11. visits.ip,
  12. count(visits.ip) AS quantity,
  13. GROUP_CONCAT(clicks.clickDate ORDER BY clicks.clickDate desc) AS clickDates,
  14. MAX(clicks.clickDate) maxDt
  15. FROM
  16. visits
  17. INNER JOIN
  18. clicks
  19. ON visits.id = clicks.id
  20. WHERE
  21. clicks.clickDate BETWEEN 1 AND 10
  22. GROUP BY
  23. visits.ip
  24. ) AS result
  25. ON ips.ip = result.ip
  26. ORDER BY maxDt DESC
  27. LIMIT 6, 2
展开查看全部
lymnna71

lymnna712#

尝试按每条记录中最大的单击日期排序。注意,我们需要将文本日期数值转换为实际整数,这样排序才能正常工作。

  1. SELECT
  2. r.ip,
  3. i.ipStatus,
  4. r.quantity,
  5. r.clickDates,
  6. FROM ips i
  7. INNER JOIN
  8. (
  9. SELECT
  10. visits.ip,
  11. count(visits.ip) AS quantity,
  12. GROUP_CONCAT(clicks.clickDate ORDER BY clicks.clickDate desc) AS clickDates,
  13. MAX(CAST clicks.clickDate AS UNSIGNED) maxDt
  14. FROM
  15. visits
  16. INNER JOIN
  17. clicks
  18. ON visits.id = clicks.id
  19. WHERE
  20. clicks.clickDate BETWEEN 1 AND 10
  21. GROUP BY
  22. visits.ip
  23. ) r
  24. ON i.ip = r.ip
  25. ORDER BY maxDt DESC
  26. LIMIT 6, 2;
展开查看全部

相关问题