Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 Linq到Sql/Sql查询帮助_Sql Server_Linq To Sql - Fatal编程技术网

Sql server Linq到Sql/Sql查询帮助

Sql server Linq到Sql/Sql查询帮助,sql-server,linq-to-sql,Sql Server,Linq To Sql,我有一张这样的桌子: Id PageId Key Content LastUpdated --------------------------------------------- 1 12 key1 content1 02-21-2010 2 12 key1 content2 02-25-2010 3 12 key2 content1 02-21-2010 4 1

我有一张这样的桌子:

Id    PageId    Key    Content    LastUpdated
---------------------------------------------

 1     12       key1    content1   02-21-2010
 2     12       key1    content2   02-25-2010
 3     12       key2    content1   02-21-2010
 4     12       key2    content2   02-25-2010
 5     12       key3    content1   02-21-2010
2     12       key1    content2
4     12       key2    content2
5     12       key3    content1
我需要能够做的是按照LastUpdated排序的PageId查询出一个不同的列表,因此我的结果如下所示:

Id    PageId    Key    Content    LastUpdated
---------------------------------------------

 1     12       key1    content1   02-21-2010
 2     12       key1    content2   02-25-2010
 3     12       key2    content1   02-21-2010
 4     12       key2    content2   02-25-2010
 5     12       key3    content1   02-21-2010
2     12       key1    content2
4     12       key2    content2
5     12       key3    content1

我正在使用Linq-2-Sql,但如果需要,我可以使用SP。关于如何实现这一点的任何帮助都将非常有用,谢谢

这里有一个想法,可以使用tsql将其放入SP中。(假设LastUpdate是一个日期时间字段,而不是您列出的格式的字符串,并假设至少使用SQL 2005。如果这两个假设不正确,则可以克服这两个假设中的任何一个):


在SQL中,其工作原理如下:

WITH i as (
  SELECT Id, PageId, Key, Content, dense_rank() over(PARTITION BY Key ORDER BY LastUpdated desc) as pos
    FROM myTable
)
SELECT Id, PageId, Key, Content
  FROM i
 WHERE pos = 1
在这里,我假设您的意思是“按键显示不同的列表”,而不是“按页面ID显示不同的列表”

您应该知道,如果每个密钥的日期不是唯一的,这将返回密钥最长日期的所有记录。如果您只想拥有其中一个字段,则可以向ORDER BY中添加其他字段


如果您不关心每个键返回几个非唯一记录中的哪一个,那么可以使用ROW_NUMBER()而不是densite_RANK()

基于PageId的不同列表将只返回1行,而不是3行。看起来您需要一个不同的“键”,但只返回包含最近一次更新的行。这是正确的吗?这很有效。“您的解决方案和Joe的解决方案之间有什么性能差异吗?”Paul我假设没有联接。但这取决于许多因素,因此最好测试您的具体情况。您的解决方案和Frank的解决方案之间是否存在性能差异?我不这么认为,但不能100%确定。尝试每种方法并比较执行计划、IO统计数据等。我只记得在使用MAX时比ROWNUMBER表现更好。再次针对您的具体情况测试每一个。