在SQL Server中,按日期排序不以desc顺序显示所有日期

时间:2018-01-16 10:03:56

标签: sql sql-server tsql

我必须按日期的降序显示每个电子商务门户的管理面板中的每日收款金额。但是,当我试图显示它将显示每日收集的数量,但随机显示。

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

5 个答案:

答案 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/201801/12/2020之前。但是,在varchar条款中,01/12/2020 之前是 16/01/2018。为什么?因为01之前。

保持数据类型不变,并担心表示层中的显示格式。

答案 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