如何在SQL中第一次出现所有行?

时间:2016-03-15 16:09:46

标签: sql-server

问题非常简单 - 我需要获取特定值的第一次出现以避免重复。有问题的表记录了应用程序中的每个用户交互,因此有数百万行可能重复信息。我将提供一些测试记录,以显示重复信息的含义,然后我的查询以显示我如何提取此信息。

ID    CreateDate           KeyValue      OldValue    NewValue
01    1/2/2016 12:46:53    000001-1-0    NULL        O
02    1/2/2016 12:47:58    000001-1-0    NULL        O
03    1/2/2016 12:46:53    000001-2-0    NULL        O

SELECT DISTINCT CreateDate, KeyValue
FROM capp.dbo.Log
WHERE Message = 'stat'
    AND OldValue IS NULL
    AND NewValue = 'O'
    AND CreateDate >= '01/01/2016'

我希望查询引入的结果应该只是第1行和第3行,并排除第2行,因为它有一个重复的KeyValue。但是,我尝试了DISTINCT ON(KeyValue),MIN(KeyValue)和GROUP BY语句,但第二条记录仍然存在。理想情况下,正如我所写的那样,第二条记录永远不会被插入到表中,因为OldValue将是" O"而不是" NULL",但我无法控制这个第三方应用程序。

我认为答案很简单,但我目前正在努力思考。

2 个答案:

答案 0 :(得分:2)

您可以使用import React from 'react'; import Link from 'react-router' export default class App extends React.Component { render() { return( <div className="wrapper"> <header> <h1>Rest Test Contact List</h1> <nav> <ul className="navigation"> <li><Link to="/contact">Contact</Link></li> <li><Link to="/about">About</Link></li> </ul> </nav> </header> {this.props.children} </div> ) } }

ROW_NUMBER

答案 1 :(得分:0)

潜在的问题是SQL不承诺数据是以任何特定顺序,也不是select语句将以特定顺序返回数据。 添加ROW_NUMBER的答案将为每条记录提供唯一的KeyValue和CreateDate,但这可能不是您期望的记录。如果您有所需的记录,请尝试添加另一个可用于选择的字段。