所以我创建了一个接受订单日期的函数,并将其作为订单下周的日期返回并测试它我已经编写了一个select语句来调用该函数。该函数与select语句一起使用但是我希望按时间顺序列出星期几的输出,即。周一,周二,周三......等等。因为现在它的输出我相信订单的顺序是......随机的。我该如何重写我的select语句?我尝试使用order by子句但它不断吐出不是一个表达式错误 ...到目前为止我的函数和select语句:
create or replace function DAY_ORD_SF
(dtcreated date)
return VARCHAR2
is
begin
RETURN TO_CHAR(dtcreated,'DAY');
end;
/
这是我的选择声明:
SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders"
FROM BB_BASKET
GROUP BY DAY_ORD_SF(DTCREATED)
ORDER BY TO_CHAR(DTCREATED,'DAY') DESC;
有人可以用select语句帮我吗?我已尝试在小组之前和之后下订单,但仍然抛出错误。
答案 0 :(得分:1)
如果您在select
中调用此功能,请在group by
和 order by
中使用该功能:
SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders"
FROM BB_BASKET
GROUP BY DAY_ORD_SF(DTCREATED)
ORDER BY TO_CHAR(MIN(DTCREATED), 'DAY') DESC;
您也可以通过在order by
子句中包含group by
表达式来执行此操作:
SELECT day_ord_sf(dtcreated), count(*) as "Number of Orders"
FROM BB_BASKET
GROUP BY DAY_ORD_SF(DTCREATED), TO_CHAR(DTCREATED,'DAY')
ORDER BY TO_CHAR(DTCREATED,'DAY') DESC;
答案 1 :(得分:0)
请勿使用此功能。
不要按字符串排序(例如TO_CHAR),它只会按字母顺序排序。
相反,您可以使用TRUNC将特定日期的所有记录分组在一起:
SELECT TO_CHAR(TRUNC(dtcreated),'DAY'), count(*) as "Number of Orders"
FROM BB_BASKET
GROUP BY TRUNC(dtcreated)
ORDER BY TRUNC(dtcreated) DESC;
这将按日期降序排序(最近的日期排在第一位)。