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')
不行,不认识别名。还是谢谢了
参考技术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如何按日期分组,底下的代码如何让它成功?的主要内容,如果未能解决你的问题,请参考以下文章