选择所有元素满足条件的组

时间:2016-02-12 07:49:51

标签: sql postgresql

我有下表:

trade_id   position_id   exit_date
34         1
35         1             2016-01-02
36         2             2016-02-07
37         2             2016-02-06
38         3           
39         3

我需要按position_id进行分组,并且只选择该群组中每个trade_id都填充了exit_date的位置。换句话说,每个trade_id中的每个position_id小组必须有exit_date才能被选中。

在上表中,只有一个限定组,即:position_id = 2

我尝试了以下内容:

select position_id from trades
where exit_date is not null
group by position_id

但是,即使只有一个交易中有一个exit_date,也会选择仓位。我只需要有所有exit_dates已填入的仓位

1 个答案:

答案 0 :(得分:2)

不应使用 private func setup() { //Overhangs the view slightly to avoid invalid constraints. self.clipsToBounds = true self.backgroundView = nil self.backgroundColor = nil self.tintColor = nil self.selectionStyle = .None //no need of setting the frame of button hear //at the time initialisation there is no frame available for cell //button.frame = CGRectMake((self.frame.width - 134)/2, 0, 134, 44) button.tintColor = nil button.backgroundColor = nil button.setImage(buttonImage, forState: .Normal) self.contentView.addSubview(button) } //set it hear because frame of the cell available hear override func layoutSubviews() { super.layoutSubviews() button.frame = CGRectMake((self.frame.width - 134)/2, 0, 134, 44) } ,而应将WHEREHAVING一起使用,如下所示:

COUNT

SELECT position_id FROM trades GROUP BY position_id HAVING COUNT(*)=COUNT(exit_date) 计算所有行,而COUNT(*)计算COUNT(exit_date)列中非NULL值的行。因此,exit_date仅保留HAVING,这两个计数彼此相等。