sql - SQL中如何根据col/result只选择一行
问题描述
这是我的表:
表日志:
Id LogCode
---------------
1 111
2 222
3 333
4 444
5 555
表LogsDetails1:
Id LogCode StartTime EndTime NQCode
--------------------------------------------------------------------
1 111 06/01/2019 15:00:00 06/01/2019 15:07:00 14
表LogsDetails2:
Id LogCode StartTime EndTime NQCode
--------------------------------------------------------------------
1 333 06/03/2019 16:00:00 06/03/2019 16:09:00 15
我希望表Logs
中的所有记录都匹配Logdetails1
和Logdetails2
。
这就是我使用左连接的原因。
结果是这样的
logId LogCode DetailsLogCode StartTime EndTime NQCode
-----------------------------------------------------------------------------
1 111 111 06/01/2019 15:00:00 06/01/2019 15:07:00 14
1 111 0
2 222 0
3 333 0
3 333 333 06/03/2019 16:00:00 06/03/2019 16:09:00 15
4 444 0
5 555 0
当相同的日志代码存在多个时,我只想从两条记录中获取一条记录,一条具有正确的详细信息日志代码,另一条为 0。我想选择具有适当值的记录。Logsdetail 表中还有更多列。我不想在开始日期、结束日期应用条件。根据界面条件,这些列可能不会出现一段时间。
我只想在日志代码上应用 con。如果我在 Logsdeais 上应用 max,它将获得该值。这可能会给我错误的细节。我不想要列,想要整行。
喜欢
1 111 111 06/01/2019 15:00:00 06/01/2019 15:07:00 14
1 111 0
我想显示第一个记录,其中 LogCode 和 DetailsLogCode 都存在而不是第二个。
当没有匹配时,显示。
我想要这样的输出:
logId LogCode DetailsLogCode StartTime EndTime NQCode
------------------------------------------------------------------------------
1 111 111 06/01/2019 15:00:00 06/01/2019 15:07:00 14
2 222 0
3 333 333 06/03/2019 16:00:00 06/03/2019 16:09:00 15
4 444 0
5 555 0
解决方案
我不知道您的尝试是什么,但希望以下查询能给您一些想法。
这里发生的是条件分组DetailsLogCode
。我也提供了一个count
供参考。如果您需要有效组内的最新日志DetailsLogCode
,您可以通过选择 max(StartTime) 来实现。
SELECT logId, LogCode, DetailsLogCode, StartTime, EndTime, NQCode, count(*) FROM (SELECT
logId, LogCode, DetailsLogCode, StartTime, EndTime, NQCode
FROM LogsDetails1
JOIN Logs on Logs.Id = LogsDetails1.logId
UNION ALL
SELECT
logId, LogCode as LogCode, DetailsLogCode, StartTime, EndTime, NQCode
FROM LogsDetails2
JOIN Logs on Logs.Id = LogsDetails2.logId) A
GROUP BY DetailsLogCode, CASE WHEN DetailsLogCode = 0 THEN 1 END
ORDER BY logId;
您可以将此SQL fiddle 用作游乐场。
推荐阅读
- node.js - 我的 js express 路由器有一个大问题
- linux - xkk符号重新映射在终端中不起作用
- python - 将 api 响应附加到 .txt 文件中而不重复
- javascript - 如何解析 txt 文件,然后通过多部分发送?
- javascript - 我想用js选择选项吗?
- java - Spring Boot - @ModelAttribute 如何知道映射值的位置?
- keycloak - keycloak 提示电子邮件到登录页面,如果可能,让 keycloak 绕过登录页面
- c++ - 如何将 const char* 转换为 uint16_t 八进制 (C/C++)
- javascript - 尝试从道具迭代对象数组但未定义(反应)
- stripe-payments - Stripe JS API V2 - 您可以在前端验证 CVC 编号吗?