按日期排序不起作用?

Order by date isn't working?

我关注table:

 CREATE TABLE logins (
  type_id BIGINT NOT NULL,
  created_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now() NOT NULL);


  INSERT INTO logins VALUES 
  (5,   '1/26/2018 5:00:00 PM'),
  (5    ,'1/26/2018 3:45:44 PM'),
  (5,   '1/26/2018 3:45:44 PM')

当我运行这段代码分开时:

SELECT l.type_id , l.created_date  FROM logins l 
WHERE  
          l.type_id = 5 AND
          l.created_date BETWEEN ((CAST('1/26/2018' AS DATE) - 1) + TIME ' 17:00:00') AND
          (CAST('1/26/2018' AS DATE) + TIME ' 17:00:00')

          ORDER BY l.created_date DESC

它按我想要的方式排列日期,但是当我 运行 以下代码时:

WITH results as (SELECT l.type_id , l.created_date  FROM logins l 
WHERE  
          l.type_id = 5 AND
          l.created_date BETWEEN ((CAST('1/26/2018' AS DATE) - 1) + TIME ' 17:00:00') AND
          (CAST('1/26/2018' AS DATE) + TIME ' 17:00:00')

          ORDER BY l.created_date DESC)

SELECT * FROM results 
UNION 
SELECT 0, NULL 
WHERE NOT EXISTS (SELECT * FROM results )

order by 根本不起作用。我想知道原因。

将订单放在 sql 的末尾。此外,UNION 删除重复项,而 UNION ALL 不删除重复项。试试这个,你会得到和之前一样的结果。谢谢

WITH results as (SELECT l.type_id , l.created_date  FROM logins l 
WHERE  
          l.type_id = 5 AND
          l.created_date BETWEEN ((CAST('1/26/2018' AS DATE) - 1) + TIME ' 17:00:00') AND
          (CAST('1/26/2018' AS DATE) + TIME ' 17:00:00')
          )
SELECT * FROM results 
UNION
SELECT 0, NULL 
WHERE NOT EXISTS (SELECT * FROM results )
ORDER BY created_date DESC