这是我的桌子:
表日志:
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
当相同的日志代码存在多个时,我只想从两个记录中取出一个记录,一个具有正确的Detailslogcode,另一个则为0。我想选择具有适当值的记录。 Logsdetail表中还有更多列。我不想在开始日期,结束日期上应用条件。这些col可能不会显示一段时间,具体取决于接口条件。
我只想在日志代码上应用con。如果我在Logsdeails上应用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
答案 0 :(得分: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;
您可以将this SQL小提琴用作游乐场。