我必须按日期的降序显示每个电子商务门户的管理面板中的每日收款金额。但是,当我试图显示它将显示每日收集的数量,但随机显示。
Dates Amount
------------------
30/12/2017 36010
30/11/2017 42780
29/12/2017 23090
29/11/2017 66060
28/12/2017 4700
28/11/2017 84370
但我必须按以下顺序显示
Dates Amount
--------------------
30/12/2017 36010
29/12/2017 23090
28/12/2017 4700
30/11/2017 42780
29/11/2017 66060
28/11/2017 84370
这是我的示例代码,请纠正我,我错了
SELECT
(SUM(MonthAmount) + SUM(LateFine)) AS DailyCollection,
CONVERT(VARCHAR(11), ApprovedDate, 103) AS InboxDate
FROM
[dbo].[SlipDetails]
WHERE
ApprovedByAdmin = 'A'
GROUP BY
CONVERT(VARCHAR(11), ApprovedDate, 103)
ORDER BY
InboxDate DESC
答案 0 :(得分:3)
使用function GenericFunction(time, sensorID, TEST_oracle_save) {
var d = new Date(2018, 00, 03, 11, 00, 00, 000);
var x = d.toISOString();
var d2 = new Date(2018, 00, 03, 11, 59, 59, 999);
var y = d2.toISOString();
RequestOne(x, y, TEST_oracle_save);
RequestTwo(x, y, TEST_oracle_save);
//Connexion to ORACLE DATABASE
//Connexion etablished
// Persist TEST_oracle_save on field Oracle
}
您正在排序字符串/文本值而不是日期值(因为您在排序之前将....Order by ApprovedDate desc
转换为字符串)
如果您想要指定格式的日期字段,可以使用以下方法。即,您可以将格式化的日期字符串转换为ApprovedDate
数据类型,仅用于排序。
Date
注意: - 如select (sum(MonthAmount) + sum(LateFine)) as DailyCollection,
CONVERT(varchar(11),ApprovedDate,103) as InboxDate
from [dbo].[SlipDetails] where ApprovedByAdmin='A'
group by CONVERT(varchar(11),ApprovedDate,103)
order by CONVERT(DATE, CONVERT(varchar(11),ApprovedDate,103),103) desc
所述,可以更好地保持数据类型不变,并更改表示层中的显示格式。
答案 1 :(得分:0)
如下所示:
select DailyCollection, InboxDate from (
select (sum(MonthAmount) + sum(LateFine)) as DailyCollection,
CONVERT(varchar(11),ApprovedDate,103) as InboxDate
from [dbo].[SlipDetails] where ApprovedByAdmin='A'
group by CONVERT(varchar(11),ApprovedDate,103)
) as T order by convert(datetime, InboxDate, 103) desc
当您将datetime
列转换为varchar
时,如果您使用已转换的varchar
列进行订购,则无法获得所需的结果,在这种情况下,您可以使用派生表并按照我上面所做的顺序将varchar
列转换回datetime
列。
答案 2 :(得分:0)
此处的问题是您将date
转换为varchar
,然后对其进行排序。 varchar
的顺序与date
的顺序非常不同。例如,在日期术语中,16/01/2018
在01/12/2020
之前。但是,在varchar
条款中,01/12/2020
之前是 16/01/2018
。为什么?因为0
在1
之前。
保持数据类型不变,并担心表示层中的显示格式。
答案 3 :(得分:0)
似乎正在基于varchar数据类型执行排序。 您需要根据日期数据类型订购记录。
答案 4 :(得分:-1)
select (sum(MonthAmount) + sum(LateFine)) as DailyCollection,
CONVERT(varchar(11),ApprovedDate,103) as InboxDate
from [dbo].[SlipDetails] where ApprovedByAdmin='A'
group by CONVERT(varchar(11),ApprovedDate,103)
order by CONVERT(DATE, CONVERT(varchar(11),ApprovedDate,103),103) desc