Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过SQL Server查询获取以下数据_Sql_Sql Server - Fatal编程技术网

如何通过SQL Server查询获取以下数据

如何通过SQL Server查询获取以下数据,sql,sql-server,Sql,Sql Server,对于以下数据,如何编写SQL server查询以仅获取下面标记为“X”的记录?基本上,我希望记录的最大日期为每组记录是相似的。下面有两组;第一个在KEY1中只有数据,第二个在KEY1和KEY2中都有数据。我试着使用OVER语句,但可以得到我需要的。谢谢 日期---键1---键2 1月1日……abc…………空 01月02日定义为空“X” 2月12日美国广播公司123 2月14日美国广播公司456'X' 因此,这里是一个更现实的数据集问题的重新措辞 我想得到的行是2、4、5和7,因为它们分别表示三个

对于以下数据,如何编写SQL server查询以仅获取下面标记为“X”的记录?基本上,我希望记录的最大日期为每组记录是相似的。下面有两组;第一个在KEY1中只有数据,第二个在KEY1和KEY2中都有数据。我试着使用OVER语句,但可以得到我需要的。谢谢

日期---键1---键2

1月1日……abc…………空

01月02日定义为空“X”

2月12日美国广播公司123

2月14日美国广播公司456'X'

因此,这里是一个更现实的数据集问题的重新措辞

我想得到的行是2、4、5和7,因为它们分别表示三个键列的每个唯一组合的最长日期。希望这更有意义。谢谢

select distinct LAST_VALUE(date) over (partition by key1, key2, key3 order by date) date,
                LAST_VALUE(rate) over (partition by key1, key2, key3 order by date) rate,
                LAST_VALUE(key1) over (partition by key1, key2, key3 order by date) key1,
                LAST_VALUE(key2) over (partition by key1, key2, key3 order by date) key2,
                LAST_VALUE(key3) over (partition by key1, key2, key3 order by date) key3
from t1
但请注意,这只适用于SQL Server 2012

在其他版本上

  select t1.* 
    from t1, (select key1, key2, key3, max(date) date from t1 group by key1, key2, key3)) t2
where t2.key1 = t1.key1 and t2.key2 = t1.key2 and t2.key3 = t1.key3 and t2.date = t1.date

这很难看,但对我来说确实有用

从tRate r join中选择r.rate,t1.* 从tRate r join中选择maxr.date日期、r.key1、r.key2、r.key3 从r.key1+r.key2+r.key3=t2上的tRate t2中选择distinct key1+key2+key3 newKey,按r.key1、r.key2、r.key3 t1组合 在r.date=t1.date和r.key1=t1.key1和r.key2=t1.key2和r.key3=t1.key3上

基本上,您需要一个查询maxdate并按键1分组,对吗?一组是三行中的键1中的“abc”,另一组是单行中的键1中的“def”?我不应该用“abc”作为键1的第四行值,因为它混淆了问题。这些记录按是否仅包含键1中的值或同时包含键1和键2中的值进行分组。所以在这个例子中,记录1和2是组1,记录3和4是组2。我想我把这个数据例子搞砸了,所以这个问题是错误的。我稍后会用正确的数据再试一次,并重新表述我的问题这是我在采访中经常问的问题之一,当人们来声称他们知道SQL=我已经改写了这个问题,并添加了一个更好的数据示例。目前,上述查询无法返回我需要的数据。我已更改查询以反映您的需求。诀窍是定义另一个可用于分组的字段。您可以不使用CTP和group by the case语句,但这看起来既丑陋又可怕。谢谢,我会尝试一下,因为它肯定比我的hack更优雅。不幸的是,此查询在我的真实数据集中只返回了3行,其中只有key1被填充、key1和key2被填充的最长日期,并且所有3个键都已填充。我需要它为表中1、2或3个键的每个唯一组合返回最大日期行。我已经修复了查询。这些应该可以。
  select t1.* 
    from t1, (select key1, key2, key3, max(date) date from t1 group by key1, key2, key3)) t2
where t2.key1 = t1.key1 and t2.key2 = t1.key2 and t2.key3 = t1.key3 and t2.date = t1.date