1.13、last_value(value any)返回最后值

  1. postgres=# select last_value(amount) over(partition by begincity order by pubtime),* FROM bills;
  2. last_value | id | goodsdesc | beginunit | begincity | pubtime | amount
  3. ------------+----+------------------------+-----------+-----------+---------------------+---------
  4. 1915.86 | 1 | 衣服 | 海南省 | 三亚市 | 2015-10-05 09:32:01 | 1915.86
  5. 2022.31 | 2 | 建筑设备 | 福建省 | 三明市 | 2015-10-05 07:21:22 | 2022.31
  6. 8771.11 | 3 | 设备 | 福建省 | 三明市 | 2015-10-05 11:21:54 | 8771.11
  7. 1316.27 | 4 | 普货 | 福建省 | 三明市 | 2015-10-05 15:19:17 | 1316.27
  8. 1030.9 | 6 | 5 0铲车,后八轮翻斗车 | 河南省 | 三门峡市 | 2015-10-05 07:53:13 | 1030.9
  9. 4182.68 | 7 | 鲜香菇2000 | 河南省 | 三门峡市 | 2015-10-05 10:38:29 | 4182.68
  10. 9621.37 | 8 | 旋挖附件38 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 5365.04
  11. 9621.37 | 9 | 旋挖附件35 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 9621.37
  12. 8290.5 | 10 | 旋挖附件39 | 河南省 | 三门峡市 | 2015-10-05 11:38:38 | 8290.5
  13. 971.54 | 11 | 设备 | 上海市 | 上海市 | 2015-10-05 07:59:35 | 971.54
  14. 9886.15 | 5 | 普货40吨需13米半挂一辆 | 上海市 | 上海市 | 2015-10-05 08:13:59 | 9886.15
  15. (11 rows)
  16. postgres=# select last_value(amount) over(partition by begincity),* FROM bills;
  17. last_value | id | goodsdesc | beginunit | begincity | pubtime | amount
  18. ------------+----+------------------------+-----------+-----------+---------------------+---------
  19. 1915.86 | 1 | 衣服 | 海南省 | 三亚市 | 2015-10-05 09:32:01 | 1915.86
  20. 1316.27 | 2 | 建筑设备 | 福建省 | 三明市 | 2015-10-05 07:21:22 | 2022.31
  21. 1316.27 | 3 | 设备 | 福建省 | 三明市 | 2015-10-05 11:21:54 | 8771.11
  22. 1316.27 | 4 | 普货 | 福建省 | 三明市 | 2015-10-05 15:19:17 | 1316.27
  23. 9621.37 | 7 | 鲜香菇2000 | 河南省 | 三门峡市 | 2015-10-05 10:38:29 | 4182.68
  24. 9621.37 | 10 | 旋挖附件39 | 河南省 | 三门峡市 | 2015-10-05 11:38:38 | 8290.5
  25. 9621.37 | 6 | 5 0铲车,后八轮翻斗车 | 河南省 | 三门峡市 | 2015-10-05 07:53:13 | 1030.9
  26. 9621.37 | 8 | 旋挖附件38 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 5365.04
  27. 9621.37 | 9 | 旋挖附件35 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 9621.37
  28. 971.54 | 5 | 普货40吨需13米半挂一辆 | 上海市 | 上海市 | 2015-10-05 08:13:59 | 9886.15
  29. 971.54 | 11 | 设备 | 上海市 | 上海市 | 2015-10-05 07:59:35 | 971.54
  30. (11 rows)

注意不要加上order by id,默认情况下,带了order by 参数会从分组的起始值开始一直叠加,直到当前值(不是当前记录)不同为止,当忽略order by 参数则是整个分组。下面通过修改分组的统计范围就可以实现order by参数取最后值

  1. postgres=# select last_value(amount) over(partition by begincity order by id range between unbounded preceding and unbounded following),* FROM bills;
  2. last_value | id | goodsdesc | beginunit | begincity | pubtime | amount
  3. ------------+----+------------------------+-----------+-----------+---------------------+---------
  4. 1915.86 | 1 | 衣服 | 海南省 | 三亚市 | 2015-10-05 09:32:01 | 1915.86
  5. 1316.27 | 2 | 建筑设备 | 福建省 | 三明市 | 2015-10-05 07:21:22 | 2022.31
  6. 1316.27 | 3 | 设备 | 福建省 | 三明市 | 2015-10-05 11:21:54 | 8771.11
  7. 1316.27 | 4 | 普货 | 福建省 | 三明市 | 2015-10-05 15:19:17 | 1316.27
  8. 8290.5 | 6 | 5 0铲车,后八轮翻斗车 | 河南省 | 三门峡市 | 2015-10-05 07:53:13 | 1030.9
  9. 8290.5 | 7 | 鲜香菇2000 | 河南省 | 三门峡市 | 2015-10-05 10:38:29 | 4182.68
  10. 8290.5 | 8 | 旋挖附件38 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 5365.04
  11. 8290.5 | 9 | 旋挖附件35 | 河南省 | 三门峡市 | 2015-10-05 10:48:38 | 9621.37
  12. 8290.5 | 10 | 旋挖附件39 | 河南省 | 三门峡市 | 2015-10-05 11:38:38 | 8290.5
  13. 971.54 | 5 | 普货40吨需13米半挂一辆 | 上海市 | 上海市 | 2015-10-05 08:13:59 | 9886.15
  14. 971.54 | 11 | 设备 | 上海市 | 上海市 | 2015-10-05 07:59:35 | 971.54
  15. (11 rows)