oracle如何按日期分组,底下的代码如何让它成功?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle如何按日期分组,底下的代码如何让它成功?相关的知识,希望对你有一定的参考价值。

SELECT TO_CHAR(ORDER_DATE,'YYYY')||'-Q'|| TO_CHAR(ORDER_DATE,'Q') AS QUARTER,
TO_CHAR(ORDER_DATE,'YYYY')||'-'||TO_CHAR(ORDER_DATE,'Mon','nls_date_language = ''American''') MONTH,
TO_CHAR(ORDER_DATE,'YYYYMMDD') ORDER_DATE,
(SELECT COUNT(ORDER_DATE) FROM TORDER WHERE BLAME = 'C' AND ORDER_DATE = T.ORDER_DATE ) BLAMEC,
(SELECT COUNT(*) FROM TORDER WHERE BLAME IS NOT NULL AND ORDER_DATE = T.ORDER_DATE) BLAMEALL,
COUNT(ORDER_DATE) - (SELECT COUNT(ORDER_DATE) FROM TORDER WHERE BLAME IS NOT NULL AND ORDER_DATE = T.ORDER_DATE) NOBLAME,
COUNT(ORDER_DATE) TOTAL,
TO_CHAR(((SELECT COUNT(ORDER_DATE) FROM TORDER WHERE BLAME IS NOT NULL AND ORDER_DATE = T.ORDER_DATE)/COUNT(F_ID))*100,'fm9999999990.00') ||'%' AS A,
TO_CHAR(((SELECT COUNT(ORDER_DATE) FROM TORDER WHERE BLAME = 'C' AND ORDER_DATE = T.ORDER_DATE)/COUNT(F_ID))*100,'fm9999999990.00') ||'%' B
FROM TORDER T
WHERE 1=1 GROUP BY TO_CHAR(ORDER_DATE,'YYYYMMDD')

参考技术A GROUP BY TO_CHAR(ORDER_DATE,'YYYYMMDD')是按order_date的年月日是否相同做日期分组,你那代码执行有什么错误吗 参考技术B 把日期例取一个别名,然后在group by 试试看行不行追问

不行,不认识别名。还是谢谢了

参考技术C 天啊,这是做什么的代码?!

如何在不考虑时间的情况下按日期时间列分组

【中文标题】如何在不考虑时间的情况下按日期时间列分组【英文标题】:How can I group by date time column without taking time into consideration 【发布时间】:2011-08-28 14:09:02 【问题描述】:

我有一堆产品订单,我正在尝试按日期分组并汇总该日期的数量。如何在不考虑时间部分的情况下按月/日/年分组?

3/8/2010 7:42:00 应与3/8/2010 4:15:00 分组

【问题讨论】:

另见类似group per hour 【参考方案1】:

Cast/Convert 将值转换为 Date 类型的分组依据。

GROUP BY CAST(myDateTime AS DATE)

【讨论】:

你知道我会如何对 LINQ to SQL 做同样的事情吗? @Nick - 不确定。尝试使用DateTime.Date - Linq to Sql:DateTime.Date - 实体框架:EntityFunctions.TruncateTime(myDateTime) 我同意,我是在回复 The Muffin Man,他在 ORM 上下文中询问它。 非常感谢...它解决了我的问题。添加了 'group by CAST(date_modified AS DATE)' 。不要忘记在选择条款中添加相同的( CAST(date_modified AS DATE) )。【参考方案2】:
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

或者在 SQL Server 2008 之后,您可以按照@Oded 的建议简单地转换为Date

GROUP BY CAST(orderDate AS DATE)

【讨论】:

【参考方案3】:

在pre Sql 2008中通过取出日期部分:

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)

【讨论】:

关于转换函数和日期时间类型的解释(char(8)和10的含义)见w3schools.com/sql/func_convert.asp【参考方案4】:

GROUP BY DATE(date_time_column)

【讨论】:

【参考方案5】:

CAST 日期时间字段到日期

select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);

【讨论】:

【参考方案6】:

下面是一个示例,当我需要计算不带时间部分的特定日期的记录数时:

select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
FROM dbo.tbltobecounted
GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
ORDER BY CONVERT(CHAR(10),dtcreatedate,103)

【讨论】:

ORDER BY 不会按预期工作,因为它不会将其视为日期,因此它将按天排序【参考方案7】:

这是在 oracle 中运行良好的示例

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');

【讨论】:

【参考方案8】:

嗯,对我来说这很直接,我使用了 groupby 演员:

例子:

Select cast(created_at as date), count(1) from dbname.tablename GROUP BY cast(created_at as date)

注意:我在 MSSQL 2016 上使用它。

【讨论】:

【参考方案9】:

我相信您需要在一年中的那一天进行分组。 那么为什么不使用 TRUNK_DATE 函数。 它的工作方式如下所述:

Group By DATE_TRUNC('day' , 'occurred_at_time')

【讨论】:

date_trunc 是针对 PostgreSQL 而不是 SQL Server 的标签,OP 正在寻找 SQL Server 的解决方案。

以上是关于oracle如何按日期分组,底下的代码如何让它成功?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle SQL 上进行查询以获取时间间隔,按特定字段分组

Oracle - 按日期区分组

Oracle - 按类别分组,日期范围[重复]

按日期间隔分组 Oracle

关于一个DB2 按照日期分组的问题求解

Oracle sql查询按日期对连续记录进行分组