【问题标题】:Distinct values for a distinct datadate in SQLSQL 中不同数据日期的不同值
【发布时间】:2012-05-08 06:29:53
【问题描述】:

在我的表中,有时我有两个带有两个值的日期,但我只需要其中一个。无论如何要根据不同的日期选择一个不同的值吗?

示例:

DATADATE                ID
2008-06-30 00:00:00.000 12
2008-03-31 00:00:00.000 12
2007-12-31 00:00:00.000 3
2007-12-31 00:00:00.000 12
2007-09-30 00:00:00.000 3
2007-09-30 00:00:00.000 12
2007-06-30 00:00:00.000 3
2007-06-30 00:00:00.000 12
2007-03-31 00:00:00.000 3
2007-03-31 00:00:00.000 12
2006-12-31 00:00:00.000 3
2006-09-30 00:00:00.000 3
2006-06-30 00:00:00.000 3

我需要得到的是:

DATADATE                ID
2008-06-30 00:00:00.000 12
2008-03-31 00:00:00.000 12
2007-12-31 00:00:00.000 12
2007-09-30 00:00:00.000 12
2007-06-30 00:00:00.000 12
2007-03-31 00:00:00.000 12
2006-12-31 00:00:00.000 3
2006-09-30 00:00:00.000 3
2006-06-30 00:00:00.000 3

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 你用的是什么版本的sql-server?

标签: sql sql-server date sql-server-2008-r2 distinct


【解决方案1】:

你可以使用group by:

select  DATADATE
,       max(IDs)
from    YourTable
group by
        DATADATE

【讨论】:

  • 我使用的是 SQL Server 2008 R2
  • 基本上,如果有两个 datadate 值只选择其中一个
【解决方案2】:

如果您使用的是 sql server 2005+。然后你可以这样做:

;WITH CTE
AS
(
    SELECT
        ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DATADATE DESC) AS RowNbr,
        Table1.*
    FROM
        Table1
)
SELECT
    *
FROM
    CTE
WHERE
    CTE.RowNbr=1

编辑

在 CTE 函数中,您可以join 或做任何您无法获得所需输出的操作。像这样:

;WITH CTE
AS
(
    SELECT
        ROW_NUMBER() OVER(PARTITION BY Table1.ID ORDER BY Table2.DATADATE DESC) AS RowNbr,
        Table1.*
    FROM
        Table1
        JOIN Table2
            ON Table1.ID = Table2.ID
)
SELECT
    *
FROM
    CTE

WHERE
    CTE.RowNbr=1

【讨论】:

  • 问题是表不止一张。。上面的date distinct和对应值distinct只适用于一张表,而查询中还有其他表但不需要修改日期除外的行的值就可以了
猜你喜欢
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2016-11-29
  • 2020-12-16
相关资源
最近更新 更多