我试图以获取id_description
的所有实例但仅基于date
列的最新行的方式查询数据。
我最近的查询尝试是......
SELECT DISTINCT ON (id) id, id_part, id_finish, id_metal, id_description, MAX(date) AS date, sort
FROM parts_finishing
WHERE id_description='3'
GROUP BY id
ORDER BY id DESC;
...导致以下返回的数据...
+----+---------+-----------+----------+----------------+------------+------+
| id | id_part | id_finish | id_metal | id_description | date | sort |
+----+---------+-----------+----------+----------------+------------+------+
| 37 | 2997 | 1 | 12 | 3 | 2015-01-08 | 1 |
+----+---------+-----------+----------+----------------+------------+------+
| 36 | 2990 | 1 | 22 | 3 | 2015-01-07 | 2 |
+----+---------+-----------+----------+----------------+------------+------+
| 34 | 2990 | 1 | 22 | 3 | 2013-01-07 | 1 |
+----+---------+-----------+----------+----------------+------------+------+
我需要所有行WHERE id_description='3'
,但只返回该部分的一条记录(id_part
,id_finish
和id_metal
列的组合)。我希望在此示例中返回id
34 的行,因为合并后的部件号的date
早于{{1} 36。
在客户端,他们的部件号可能看起来像2990-01-22'所以我需要 这三个列的最新记录组合成一个基于最新id
的单个有效列。所以我需要查询返回date
36和37的行。如果它有助于固有的id
(date
类型)和date
(id
)行只会增加,所以serial
行不可能从其初始值改变。
所以基于上面的表格,我需要查询返回以下内容...
date
答案 0 :(得分:0)
这个似乎可以工作,虽然我需要继续使用更大量的数据进行测试。如果有人认为他们有更准确/有效的答案,请随时发布。
SELECT DISTINCT ON (id_description, sort)
pf.id, id_description, date, description, inside_hours_k, inside_rate, outside_material, sort
FROM parts_finishing AS pf
LEFT JOIN parts_finishing_descriptions AS fd ON (pf.id_description=fd.id)
WHERE pf.id_part='1013' AND pf.id_finish='6' AND pf.id_metal='30' AND date>'2013-12-31' AND date<'2015-01-01'
ORDER BY sort ASC;
我不得不修改答案,虽然我也意识到sort
列自然是DISTINCT
可以发言,因为同一date
的两个记录都没有相同值。