Postgresql:得到一个有序组的第一项不起作用

时间:2016-04-11 17:33:46

标签: postgresql

我有这些数据:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let loginView = LoginView(tempSuperView: self.view)
        loginView.setupViews()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

- 我想要选择的是指示的行,即每个person_id具有最新日期的行。

- 此外,日期的输出格式必须为dd-mm-YYYY

到目前为止,我正在尝试这个:

| id     | person_id | date                |
|--------|-----------|---------------------|
| 313962 | 1111111   | 2016-04-14 16:00:00 | --> this row
| 313946 | 2222222   | 2015-03-13 15:00:00 | --> this row
| 313937 | 1111111   | 2014-02-12 14:00:00 |
| 313944 | 1111111   | 2013-01-11 13:00:00 | 
| ...... | .......   | ................... | 

我正在尝试不同的方法,但我有各种聚合错误消息,例如:

SELECT
    l.person_id,
    to_char(DATE(l.date), 'dd-mm-YYYY') AS user_date
FROM login l
group by l.person_id
order by l.date desc

for select distinct order by expressions must appear

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

有几种方法,但最简单的方法(也许更有效 - 但不是SQL标准)是依赖Postgresql的DISTINCT ON

SELECT DISTINCT ON (person_id ) 
id, person_id , date                
FROM login 
ORDER BY person_id , date desc

日期格式化(你真的想要吗?)可以在外部选择中完成:

  SELECT id,person_id, to_char(DATE(date), 'dd-mm-YYYY') as date
  FROM ( 
    SELECT DISTINCT ON (person_id ) 
    id, person_id , date                
    FROM login 
    ORDER BY person_id, date desc )  
  AS XXX;

答案 1 :(得分:0)

您需要以下内容来了解​​为每个人抓取的日期。

select l.person_id, to_char(DATE(d.maxdate), 'dd-mm-YYYY')
from login l
inner join
    (select person_id, max(date) as maxdate
    from login group by person_id) d on l.person_id = d.person_id
order by d.maxdate desc

答案 2 :(得分:0)

您可以使用子查询来完成此操作:

SELECT
    l.person_id,
    to_char(DATE(l.date), 'dd-mm-YYYY') AS user_date
FROM login l
where l.date = (select max(date) from login where person_id =  l.person_id)
order by l.person_id