我有一个简单的问题,涉及按日期对行进行分组以及#34;叙述"周期。 让我们假设我的文章非常简单。 ID是PK,标题和日期。日期列是日期时间/时间戳。
我想以某种方式对我的结果进行分组,以便我可以在视图中显示它们,如
今天写道:
写于最近7天:
写于最近30天:
旧版:
我可以通过一些 group by 语句在一个查询中实现这一点吗?
答案 0 :(得分:3)
戈登应该赞成写这篇文章。但是我想你可能只想附加一个带有相应描述符的列,并且可能按照你希望看到它们的顺序对它们进行排序。
select
title,
case when date = curdate() then 'today'
when date >= curdate() - interval 6 day then 'last 7 days'
when date >= curdate() - interval 29 day then 'last 30 days'
else 'older'
end as bucket,
from ...
order by
case
when date = curdate() then 1
when date >= curdate() - interval 6 day then 2
when date >= curdate() - interval 29 day then 3
else 4
end,
title ...
看起来你没有按字母顺序排列标题。如果您希望它们按年龄排序,则删除案例表达式并使用日期值。
答案 1 :(得分:0)
您可以对分组列使用 public class Survey
{
public int SurveyId { get; set; }
[Required]
public string Description { get; set; }
[Required]
public string Classification { get; set; }
[Required]
public int Score1{ get; set; }
[Required]
public int Score2{ get; set; }
public string Notes { get; set; }
}
语句。像这样:
case
答案 2 :(得分:0)
谢谢戈登。这很简单...... 这就是我想要的。
select
id,
title,
published_at,
(case
when published_at > curdate() then 'future article'
when published_at = curdate() then 'today'
when published_at >= curdate() - interval 6 day then 'last 7 days'
when published_at >= curdate() - interval 29 day then 'last 30 days'
else 'older'
end) as 'when'
from
articles
order by
published_at desc