sql - SQL Server:从 GROUPED BY 结果集中选择特定行
问题描述
我有一个问题,我的查询需要选择TransactionDateTime
fromActivityId = 6
而不是 date 值 from ActivityId 66
。
数据集如下所示:
HistoryId | CardId | ActivityId | TransactionId | TransactionDateTime
----------+--------+------------+---------------+----------------------------------
393338052 58329067 12 937DB39B-711B-E611-80D3-0025B5560BDC 2016-06-01 01:43:28.307
393342190 58329067 13 NULL 2016-06-01 01:50:02.243 2016-06-01 01:50:02.243
393506845 58329067 6 00000000-0000-0000-0000-000000000000 2016-06-01 08:51:44.640
393506845 58329067 66 00000000-0000-0000-0000-000000000000 2016-06-03 09:01:20.017
385651974 58329067 5 937DB39B-711B-E611-80D3-0025B5560BDC 2016-05-16 14:23:14.560
385596117 58329067 16 NULL 2016-05-16 13:10:16.600 2016-05-16 13:10:16.600
我目前的查询如下所示:
SELECT
CC.[CreditCardId],
CC.[ActivityId],
CC.[TransactionDateTime],
FROM
dbo.[CreditCard] CC WITH(NOLOCK)
WHERE
CC.[ActivityId] = 66
AND CC.[VANTransactionDateTime] >= @ReportStartDate
AND CC.[VANTransactionDateTime] < @ReportEndDate
但是,我需要修改查询以从 ActivityId 6 行输出 TransactionDateTime,而不是从 ActivityId 66 输出 TransactionDateTime。其他一切都需要来自 ActivityId 66 行。6 行和 66 行都具有相同的 Card Id 和相同的 TransactionId。
我相信这可以通过插入不同的 CardID 来实现,按 CardID 和 TransactionId 将它们分组到一个临时表中,然后使用它来提取 6 行。但我想知道这个操作是否可以在单个查询操作中完成,也许是通过使用 group by 的聚合函数。
任何帮助都会很棒!
谢谢
解决方案
我建议你使用子查询来处理这个问题
SELECT
CC.[CreditCardId],
CC.[ActivityId],
(SELECT TransactionDateTime
FROM dbo.[CreditCard] AS cs
WHERE Cs.[ActivityId] = 6 and cs.CardId = cc.CardId) AS [TransactionDateTime]
FROM
dbo.[CreditCard] CC WITH(NOLOCK)
WHERE
CC.[ActivityId] = 66
AND CC.[VANTransactionDateTime] >= @ReportStartDate
AND CC.[VANTransactionDateTime] < @ReportEndDate
试着举一些例子,有时很难猜出你想要什么,我希望这对你有用。
推荐阅读
- javascript - jQuery/JavaScript:保持 JSON 对象的最新日期按日期分组
- windows - cfssl 无法使用 cygwin 在 Windows 上编译
- django - operationError at admin/.... 一个连接中最多 64 个表
- image - 如何从 Rust 中的 camera_capture 灰度图像
- ios - cordova-plugin-purchase:即使在调用命令之后,iOS 也不做任何事情
- azure - Fluentd 不输出到文件
- javascript - D3从节点隐藏.text元素
- java - 如何在android中打开日期选择器时设置默认年份(但是在滚动年份时它需要显示其他年份直到当前年份)
- python - 如何捕获包含在 boost python 模块中的 C++ 代码中抛出的 Python 异常
- java - Eclipse Gradle 不支持请求的构建类型“java-library”