从联合获取每个ID的单个记录

时间:2018-06-24 22:53:10

标签: sql postgresql

我将100个广告文字存储在一个表中,它们可以是预定的,也可以是默认的。我想为每个cust_id返回一条记录。

我有两个选择sql查询-第一个查询客户是否有预定文本,第二个查询默认文本。

SELECT
            id, cust_id
        FROM
            texts
        WHERE
            over18 = FALSE
            AND now()
            BETWEEN ad_start_date
            AND ad_end_date)
    UNION ALL (
        SELECT
            id, cust_id
        FROM
            texts
        WHERE
            over18 = FALSE
            AND texts.default = TRUE
        ORDER BY
            created_at DESC)

问题在于,第二个选择对于每个cust_id返回多个记录。

2 个答案:

答案 0 :(得分:0)

如果需要基于集合的结果,则应使用UNION而不是UNION ALL。 您可以阅读有关其差异here的更多信息。另一种方法是使用DISTINCT子句。

答案 1 :(得分:0)

您似乎想要train_data = lgb.Dataset(X_train, label=y_train, categorical_feature=cat_features) test_data = lgb.Dataset(X_test, label=y_test, reference=train_data) param = {'num_trees': 4000, 'objective':'binary', 'metric': 'auc'} bst = lgb.train(param, train_data, valid_sets=[test_data], early_stopping_rounds=100)

distinct on