我需要从数据库中选择按日期唯一的行。理想情况下,这样的行很少,但如果遇到,那么您只需在其中选择一个值。 DISTINCT 只是假设一个唯一性过滤器,但它并不关注它选择的记录。让我们举一个更好的例子:
+--+---------+---------------+---------------+--------------------------+
|id|credit_id|some_property_1|some_property_2|date |
+--+---------+---------------+---------------+--------------------------+
|1 |1 |3 |null |2024-01-01 00:00:00.000000|
|2 |1 |null |false |2024-02-01 00:00:00.000000|
|3 |1 |3 |true |2024-03-01 00:00:00.000000|
|4 |1 |3 |null |2024-03-01 00:00:00.000000|
|5 |1 |3 |null |2024-03-01 00:00:00.000000|
+--+---------+---------------+---------------+--------------------------+
因此,这里您需要按credit_id降序返回所有记录(为了测试,它们在这里都是 1),date如果date它们相同,那么这样的子列表中的优先级(我们这样称呼它)将赋予记录some_property_2 != null(如果有这样的> 1,则其中任何一个)。即如果相等,则date根据上述条件只显示一条记录。必须显示所有列。请求的结果应该是这样的:
+--+---------+---------------+---------------+--------------------------+
|id|credit_id|some_property_1|some_property_2|date |
+--+---------+---------------+---------------+--------------------------+
|3 |1 |3 |true |2024-03-01 00:00:00.000000|
|2 |1 |null |false |2024-02-01 00:00:00.000000|
|1 |1 |3 |null |2024-01-01 00:00:00.000000|
+--+---------+---------------+---------------+--------------------------+
Database PostgreSQL,但建议编写可移植的查询,即所有数据库的标准。如果这是不可能的,那么,我当然会对原生的感到满意。我还在Spring和标签中指出Java- 因为我正在使用这些工具编写此逻辑,并且很高兴能在该语言中找到解决方案,但这里有一些微妙之处:
- 需要分页
- 仅仅对所有记录进行“正面”搜索是不合适的,因为可能有 10,000 条记录,但要将它们放在前面,有条件地只需要 20 条,这样的查询性能将为零。
PS我并不是要求你在这里帮我解决问题。我面临一个真正的问题,但我不知道如何SQL解决它。