用户使用日期排序数据的 ORDER BY 查询是否可以是不确定的?

ole*_*rio 1 postgresql order-by

我的数据库中有一个表,我使用以下标准存储日期:YYYY-MM-DD。正如你所看到的,我没有节省时间。第一次将同一个表导出到 csv 文件时,我按顺序获得了以下记录:

AAA@outlook.com
BBB@gmail.com
CCC@gmail.com
DDD@hotmail.com
Run Code Online (Sandbox Code Playgroud)

但是,当我运行相同的查询将数据导出到相同的 CSV 时,我按以下顺序收到了记录:

AAA@outlook.com
111@hotmail.com
222@gmail.com
333@gmail.com
Run Code Online (Sandbox Code Playgroud)

因此,我得出的结论是对数据进行排序,因为这可能是不确定的。不是吗?这是我从数据库导出数据的查询:

SELECT id AS "_id", cpf, email, name, agency, account, "createdDate" FROM "NextUsers", "Users" WHERE "userId"="Users".id ORDER BY "createdDate" OFFSET $1 LIMIT 500;
Run Code Online (Sandbox Code Playgroud)

其中 $1 从 0 开始,每次迭代都会增加 500。OBS:两个查询返回的数据均已正确排序,但顺序与您所看到的不同。

Joe*_*e W 5

如果您要排序的日期中有重复值并且没有按任何其他列排序,则您获取它们的顺序将是任意的。

结果集1

email|date
aaa@gmail.com|2019-01-01
bbb@gmail.com|2019-01-01
ccc@gmail.com|2019-01-01
Run Code Online (Sandbox Code Playgroud)

结果集2

email|date
ccc@gmail.com|2019-01-01
bbb@gmail.com|2019-01-01
aaa@gmail.com|2019-01-01
Run Code Online (Sandbox Code Playgroud)

如果您只有按日期排序,数据库可以返回任一结果集,就像按日期字段排序一样,并在获取记录时提取记录,而不管顺序如何。

如果您需要结果中的顺序一致,则需要向顺序添加更多字段,直到可以获得一组更独特的字段来排序。

对于您的查询,我会将其更新为也按 _id 排序,这样您将获得一致的结果集

SELECT id AS "_id", 
       cpf, 
       email, 
       name, 
       agency, 
       account, 
       "createdDate" 
FROM "NextUsers", 
     "Users" 
WHERE "userId"="Users".id 
ORDER BY "createdDate",
         id 
OFFSET $1 
LIMIT 500;
Run Code Online (Sandbox Code Playgroud)