【问题标题】:Firebird don't show duplicate rows by columnFirebird 不按列显示重复的行
【发布时间】:2013-01-23 07:04:37
【问题描述】:

我有一个包含以下数据的表:

- DATEURM     IDV    UNID
- 2013-02-02  15259  W0L0TGF0572 
- 2013-02-02  15259  W0L0TGF0572
- 2013-02-02  15674  ZFA18503158 
- 2013-02-02  16157  ZFA18503158
- 2013-02-02  16157  ZFA18503158
- ...

我使用这个查询从中选择数据:

SELECT * FROM TBL order_date WHERE DATEURM BETWEEN DATE 'today'+10 AND DATE 'today'+40 order by DATEURM asc ROWS 50

我想要的是不要得到 UNID 列的重复行,结果类似于:

- DATEURM  IDV UNID
- 2013-02-02  15259  W0L0TGF0572 
- 2013-02-02  16157  ZFA18503158
- ...

我玩过 DISTINCT 和 GROUP BY,但几个小时后没有得到任何好的结果 :(

【问题讨论】:

  • 如果将 DISTINCT 添加到 select 子句会得到什么?
  • 如果我将一个简单的 DISTINCT 添加到该表的 select 子句中,我只会在输出中获得 UNID 列。我想我还需要某种 COUNT 或 SUM 才能使其工作。
  • 看看my answer

标签: sql select firebird


【解决方案1】:

从您的评论中,您说现在您希望每个 unid 有一行,并且您不介意获得哪些其他值,所以试试这个:

SELECT unid, min(dateurm) dateurm, min(idv) idv 
  FROM order_date
 WHERE DATEURM BETWEEN current_date + 10 AND current_date + 40
 group by unid
 order by 2

在我得到的相同数据上:

UNID        DATEURM             IDV
=========== ========== ============ 
W0L0TGF0572 2013-02-02        15259
ZFA18503158 2013-02-02        15674

SQL>

【讨论】:

  • 我遇到的问题是,从 UNID 列的角度来看,最后 2 个结果仍然不是唯一的,我希望每个 UNID 只有一行具有 IDV 的任何值( IDV 有点指向相同的数据,但我仍然需要至少一个 IDV 才能到达那里)。
  • 你没有在你的问题中声明,你应该编辑它以添加重要信息!
  • 这确实很完美(尽管 idv 后面没有逗号),感谢您的时间和帮助。
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多