【问题标题】:Extrapolating sources and date range from table data从表数据中推断来源和日期范围
【发布时间】:2016-06-22 21:54:12
【问题描述】:

这是一个奇怪的请求。我有一个大约 1000 万行的表。在这些行中是 sourcename、sourceState 和 date。我要做的是创建一个非重复行列表,其中基本上包含每个源名称、源状态和日期......但每个行中最早的一个。

所以和例子...假设我有一行源状态是 FL,源是布劳沃德县,它出现在数据库中的早期记录是 19960912(日期是这样的,它在 varchar 列中) ,但是还有 1000 个其他 FL 和 Broward County 条目,我需要将它们全部丢弃,只留下唯一的源状态、源名称和日期……对于表中存在的每个唯一源名称……大约 500左右。

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

试试这个

    SELECT DISTINCT SOURCENAME, SOURCESTATE, MIN(DATE) FROM TABLE_A 
    GROUP BY SOURCENAME, SOURCSTATE

【讨论】:

  • 这很好用!有没有办法按源状态对结果进行分组?
  • 为什么不...只需从 Group By 和 SELECT 子句中删除 SOURCENAME。 @萨尔
  • 为什么要否决@devotee先生...没有任何解释,它没有什么清楚明白的......好的,谢谢
【解决方案2】:

想到的是row_number()

select t.*
from (select t.*,
             row_number() over (partition by sourcename order by date asc) as seqnum
      from t
     ) t
where seqnum = 1;

【讨论】:

  • 这个问题在这方面措辞不佳,但我认为 OP 需要按名称和状态分组的结果,而不仅仅是名称。请注意,他在“unique sourcename”之前的句子中提到了“unique sourcestate”。再次确认,措辞不佳。
  • 这会删除除最早的源名称和日期之外的所有数据吗?另外我应该提到表名是 PEOPLE
  • 这将返回每个唯一源名称最早出现的时间,如果有两个具有相同源名称的状态,则仅返回其中的 一个
  • 是的,很抱歉我措辞不佳 :( 但是是的,我只想在 PEOPLE 表中留下一个唯一的源名称、源状态以及每个源名称和源状态的最早日期。再次.. 我的措辞不好,我很抱歉
  • 好的,这个答案不考虑sourcestate,所以它不会做你想做的事。链接的重复问题中的答案将做到这一点。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多