【问题标题】:Group by quarters annual按季度分组
【发布时间】:2012-10-19 18:03:45
【问题描述】:

我需要在我的.php 文件中按季度分组。在 bold 类型中,我显示需要修复的代码,即 switch case 4。刚才我对年、月、周和日进行了分组,但现在我需要季度名称 case 4。我试过了GROUP FUNCTION 的代码,但它显示了 2010 年和 2011 年的 5 个组,这是错误的。

switch ($level) 
{

  case '4':**
    $group = "FLOOR(EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(invoice_date))/3)";</b>
    break;
}

固定是

SQL 部分 案例“4”: $group = "EXTRACT(YEAR FROM_UNIXTIME(invoice_date)) as group_field2, EXTRACT(QUARTER FROM_UNIXTIME(invoice_date))"; 休息; $sql_select = $db->query("SELECT sum(amount) AS invoice_amount, " . $group ." AS group_field FROM " . DB_PREFIX . "invoices WHERE invoice_date>= " . $startup . " " . $user_query . " GROUP BY group_field, group_field2 ORDER BY group_field2 DESC, group_field DESC"); 文本 - 链接部分 案例“4”: $start = strtotime('+' . (($view_details_received['group_field'] - 1) * 3) . 'month', strtotime($view_details_received['group_field2'] . '/1/1')); $finish = strtotime('+' . (($view_details_received['group_field'] - 1) * 3 + 3) . 'month', strtotime($view_details_received['group_field2'] . '/1/1')); $start = getdate($start); $finish = getdate($finish - 86400); $title = 'Q' 。 $view_details_received['group_field2'] 。 ',' 。 $view_details_received['group_field']; 休息;

【问题讨论】:

  • 你指的那个错误是什么?
  • 感谢 DAN 在 mysql 的 case4 部分中,我使用函数 FLOOR 进行按季度分组,但结果请参见此处的屏幕截图i48.tinypic.com/2z56smp.gif 对于 2010 年和 2011 年的季度不正确 5
  • YEAR_MONTH 会给你类似 201101 的结果。除以 3 没有多大意义。我认为您正在寻找替代 YEAR_MONTH 的东西。
  • 是的 DAN,我需要按季度对发票进行分组......比如 2012 年的 4 个季度,2011 年的 4 个季度等等......但我不知道如何 :-( YEAR_MONTH 是一个想法,但很糟糕想法..任何建议请..

标签: php mysql group-by


【解决方案1】:

您可以在 SQL 中使用 EXTRACT(QUARTER FROM date),然后执行常规 GROUP BY

请参阅 MySQL 网页上的 EXTRACT documentationtable of possible arguments

【讨论】:

  • 感谢卡米尔,但 EXTRACT(QUARTER FROM date) 对我来说并不正确,因为我将所有年份的所有季度分组,例如显示 q1(从 2010+2011+2012)q2(从 2010+2011+2012 ) q3 ( 从 2010+2011+2012) q4 ( 从 2010+2011+2012) 我需要逐季分组 q1 ( 从 2012) q2 ( 从 2012) q3 ( 从 2012) q4 ( 从 2012) q1 ( 从2011)
  • 为什么不使用两个参数来分组?比如:GROUP BY EXTRACT(QUARTER FROM date), EXTRACT(YEAR FROM date)...这应该为您的数据集中每年的每个季度提供特定的组...
  • thx Kamil 但 2 个参数的结果仅按第二个参数分组,也就是仅按年份代码分组我使用
     $group = "EXTRACT(QUARTER FROM FROM_UNIXTIME(invoice_date)), EXTRACT (YEAR FROM_UNIXTIME(invoice_date))"; 
    结果正确的是我所有 3 年总共 12 夸脱,但只有 4 次:2012 年 1 月 18 日 2011 年 11 月 14 日 2010 年 9 月 20 日 2009 年 1 月 20 日
  • 我如何同时传递 2 个参数
  • 看起来你正在使用一些框架?您需要了解如何按子句输入更复杂的分组...无论如何-我没有了解您的应用程序的背景概念-您为什么将日期“2012 年 1 月 18 日”命名为四分之一?它不是也永远不会......季度就像 1/2012......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多