【问题标题】:SQL Query outputting wrongSQL查询输出错误
【发布时间】:2013-03-18 10:59:33
【问题描述】:

我正在尝试创建一个 SQL 查询,它输出我的类别表中的每个类别。以及计算连接到类别的每个线程。现在,这很好,但是当我尝试添加一个新字段时,我需要在其中显示最新的线程日期时间,它出错了。

这是我目前的 SQL:

SELECT categories.category_name, 
       categories.category_id, 
       COUNT(threads.thread_category_id) AS 'threadCount', 
       threads.thread_datetime
FROM   categories LEFT OUTER JOIN 
       threads ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id, threads.thread_datetime
ORDER BY threads.thread_datetime DESC

结果如下:

但我真正希望它输出的是这个,以及它旁边的一个字段,其中包含我的线程表中最新线程的 thread_datetime,基于 ORDER BY

我一直在尝试不同的 JOINS 以及许多其他资源。似乎找不到可行的方法。

【问题讨论】:

标签: sql select join sql-order-by


【解决方案1】:

试试这个(已将日期时间从您的组移动到选择的聚合部分)

SELECT categories.category_name, categories.category_id, 
COUNT(threads.thread_category_id) AS 'threadCount', MAX(threads.thread_datetime)
FROM categories LEFT OUTER JOIN threads ON categories.category_id =     threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
ORDER BY max(threads.thread_datetime) DESC

【讨论】:

  • 这似乎成功了。以前从未想过使用 MIN & MAX。我会接受你的回答,当我可以的时候。谢谢!
  • @KevinJensenPetersen,可以解决问题,只是它提供了与问题和无序数据中指定的模式不同的模式。
  • @KevinJensenPetersen,如果这是正确答案,它与 JodyT 的答案相同,据我估计,这似乎早了 2 分钟。 stackoverflow.com/a/15475227/659190
  • @Jodrell 排序很好,我已经编辑反映。我不明白您对架构的意思,因为我复制了 OP 代码并仅通过将 thread_datetime 移动到 SELECT 子句来编辑它
  • 我的意思是 OP 没有在第二个网格的结果集中包含 DateTime 列,但它可能仍用于排序。
【解决方案2】:

您可以使用MAX() 获取每个组的最新日期。

尝试以下查询:

SELECT 
    categories.category_name, 
    categories.category_id, 
    COUNT(threads.thread_category_id) AS 'threadCount', 
    MAX(threads.thread_datetime)
FROM categories 
LEFT OUTER JOIN threads 
    ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id

【讨论】:

    【解决方案3】:

    类似的,

    SELECT
                    categories.category_name, 
                    categories.category_id, 
                    COUNT(threads.thread_category_id) AS 'threadCount'
        FROM 
                    categories
            LEFT OUTER JOIN 
                    threads 
                        ON categories.category_id = threads.thread_category_id
        GROUP BY 
                    categories.category_name,
                    categories.category_id
        ORDER BY 
                    max(threads.thread_datetime) DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多