【问题标题】:SQL: How can I find repeated value's till separationSQL:如何找到重复值直到分离
【发布时间】:2015-12-07 22:59:54
【问题描述】:

我想用 SQL 做的是在列中查找重复值,直到有另一个按日期排序的值。

这是我的桌子。我使用"CURRENT_TIMESTAMP" 作为日期列。

Name    |date     
-------------------
Bart    |12-12-2014
Bart    |23-12-2014
Joost   |24-12-2014
Bart    |25-12-2014
Bart    |26-12-2014
Bart    |27-12-2014

所以在这个例子中,我想要返回数字“3”和 name 的最后一个已知值,所以在这个例子中是“Bart”。

我希望我说清楚了,抱歉标题不清楚!

【问题讨论】:

  • 我想不出什么可以尝试。我只选择了姓氏,因为那是我唯一需要的东西,现在我需要知道它在分离之前发生了多少次。所以我有这个代码:“SELECT name, time FROM name ORDER BY datum DESC LIMIT 1;”
  • 那么时间呢?

标签: php mysql sql database select


【解决方案1】:

嗯。 . .这是将逻辑放在where 子句中的一种方法:

select count(*), max(lastname.name)
from tablename t cross join
     (select t2.name from tablename t2 order by date desc limit 1) as lastname
where t.name = lastname.name and
      t.date > (select max(t2.date) from tablename t2 where t2.name <> lastname.name);

【讨论】:

  • 我需要两张桌子吗?还是我完全看错了……我对 SQL 不太了解,所以请原谅误解:) @GordonLinoff
  • @Joost 。 . .这只使用了一个表,被引用了两次。
【解决方案2】:

您可以使用以下查询:

SELECT Name, COUNT(*) AS cnt
FROM (
SELECT Name, [date],
       ROW_NUMBER() OVER (ORDER BY [date]) -
       ROW_NUMBER() OVER (PARTITION BY Name ORDER BY [date]) AS grp       
FROM mytable ) AS t
GROUP BY Name, grp
ORDER BY COUNT(*) DESC

此查询尝试识别记录孤岛,即具有相同 Name:grp 计算字段的连续行正是这样做的。

如果您希望Name 的连续记录数最多,只需在上述查询中使用TOP 1

Demo here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    相关资源
    最近更新 更多