【问题标题】:SQL : Having with calculation on some parametersSQL:对某些参数进行计算
【发布时间】:2014-12-10 14:18:24
【问题描述】:

我目前正在寻找一种方法来确定 HAVING 子句中某些参数之间的差异值。

我解释一下,

我有一张这样的桌子:

我的表

id   name    date  
1    john    7/12  
2    doe     7/12  
3    john    7/14  
4    john    9/13  
5    doe     9/14

我想按赞分组

GROUP BY name 
HAVING 'MyTAble[a].date - MyTAble[b].date > 1 month'

拥有(计数):

john (3)  
doe (1)  
john (1)  
doe (1)  

我知道有一个 MONTH() 函数,但如果我按名称创建一个组,MONTH(date) 我不会得到预期的结果。

我可能错过了一个明显的解决方案(或者这是不可能的)。无论如何,希望你有一个想法。

【问题讨论】:

  • MyTAble[a].date - interval 1 month > MyTAble[b].date;语法可能变化检查您的 RDBMS 的正确格式

标签: mysql sql date group-by having


【解决方案1】:

由于缺少有关您的查询或数据库引擎的更多信息,我会说答案是使用 where 子句而不是 group by / having。根据我的经验,having 用于根据聚合函数的值限制查询结果,而您的 having 子句不使用该值。

【讨论】:

  • 感谢您的回答,我正在使用mysql。实际上我写这个例子是为了展示总体思路。更具体地说,它是关于通知的:我想按主题对通知进行分组(例如“迈克尔 - 以及更多 - 已评论此主题”),但如果我只按主题分组,我将始终拥有“等等”,但如果我添加一个日期条件,如果有人在一个月后评论一个主题,它将与其他通知分开。我可以给你整个请求,但它可能不会更相关地解释我的问题......
  • 那么,我将采取的方法是将您的 MyTAble[a].date - MyTAble[b].date > 1 month 放入 select 子句中并 order by 它。
【解决方案2】:

好的,

我想这有点牵强,但我找到了解决方案,所以我研究了 select 子句:

SELECT mytable.name name, mytable.date , CONCAT(mytable.name,DAY(mytable.date)) group_id 

我创建一个对我想要收集的所有实体都通用的 id (group_id),然后我按这个通用 id 分组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多