周六和周日的行总和
Posted
技术标签:
【中文标题】周六和周日的行总和【英文标题】:Sum of rows on Saturdays and Sundays 【发布时间】:2014-11-05 21:25:24 【问题描述】:我正在尝试从我的表中获取周六或周日等一天的行数。
下面的代码不起作用。
知道如何实现这一目标吗?
SELECT next_day(sysdate-8, 'SUN') from dual;
NEXT_DAY(SYSDATE-8,)
-------------------
2014/11/02 21:22:30
我的尝试:
select sum(QTY),GROUP from table where next_day(order_date-8, 'SUN') group by GROUP;
【问题讨论】:
你的问题是什么?您应该编辑您的问题并添加示例数据和所需的结果。 不是真正的重复,但与我认为您想要实现的目标非常相关:Determine if Oracle date is on a weekend。 【参考方案1】:要仅过滤周日/周六,您可能需要TO_CHAR()
select sum(QTY),GROUP
from table
where TO_CHAR(order_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') in ('SUN','SAT')
group by GROUP;
【讨论】:
警告:这不是防水解决方案,因为 to_char 的结果取决于 NLS 设置。 *** 上有许多答案提供了与 NLS 无关的方法来做到这一点。 感谢吨,它的工作,order_date 是 partition_key,因为它现在被用作函数。此查询正在进行全表扫描。有什么方法可以在不使用 to_char 函数的情况下使用 order_date 吗? 最好使用TO_CHAR(order_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN')
,以便独立于 NLS 设置。【参考方案2】:
我认为你可以使用NEXT_DAY()
函数如下:
SELECT SUM(qty), group
FROM table
WHERE order_date = NEXT_DAY(order_date - 1, 'SAT')
OR order_date = NEXT_DAY(order_date - 1, 'SUN')
GROUP BY group
如果您在 order_date
列上有索引,这甚至可以避免全表扫描。我只是在一个类似的表上尝试了它,并使用上面的TO_CHAR()
方法进行了全表扫描,而在这里使用此方法我对日期列的索引进行了全扫描。
【讨论】:
以上是关于周六和周日的行总和的主要内容,如果未能解决你的问题,请参考以下文章