<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Join with conditions in Splunk Search</title>
    <link>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579051#M201797</link>
    <description>&lt;P&gt;I have two tables&lt;/P&gt;&lt;TABLE width="612px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="144px"&gt;EmailX&lt;/TD&gt;&lt;TD width="161px"&gt;Doc&lt;/TD&gt;&lt;TD width="198px"&gt;DateChecked&lt;/TD&gt;&lt;TD width="109px"&gt;Name&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 1&lt;/TD&gt;&lt;TD width="198px"&gt;1/1/2021&lt;/TD&gt;&lt;TD width="109px"&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 2&lt;/TD&gt;&lt;TD width="198px"&gt;1/15/2021&lt;/TD&gt;&lt;TD width="109px"&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 3&lt;/TD&gt;&lt;TD width="198px"&gt;1/30/2021&lt;/TD&gt;&lt;TD width="109px"&gt;b&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE width="340px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;EmailY&lt;/TD&gt;&lt;TD width="196.391px"&gt;DateLogin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;12/10/2022&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;11/10/2022&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;1/15/2021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a@a.com&lt;/TD&gt;&lt;TD&gt;1/25/2021&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to join them on Emailx &amp;amp; EmailY and then in result&amp;nbsp; for each Email&amp;nbsp; i need to get most recent DateLogin that is before&amp;nbsp;DateChecked.&amp;nbsp; I am hoping to no have to use joins as my second table has more than 50k records.&amp;nbsp;&lt;/P&gt;&lt;P&gt;So the results should be like this&lt;/P&gt;&lt;TABLE width="609px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;EmailX&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;DateChecked&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;Name&lt;/TD&gt;&lt;TD width="54.9844px"&gt;RecentDateLogin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 1&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/1/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;a&lt;/TD&gt;&lt;TD width="54.9844px"&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 2&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/15/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;a&lt;/TD&gt;&lt;TD width="54.9844px"&gt;1/15/2021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 3&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/30/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;b&lt;/TD&gt;&lt;TD width="54.9844px"&gt;1/25/2021&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So if I have to write a sql, it would be something like below. I haven't tested below , but you get the idea.&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;SELECT t1.EmailX, t1.Doc, t1.DateChecked, t1.Name, max(t2.DateLogin) as RecentDateLogin 
FROM table1 AS t1
LEFT JOIN table 2 AS t2
ON t1.EmailX = t2.EmailY
AND t1.DateChecked&amp;gt;t2.DateLogin
Group By t1.EmailX, t1.Doc, t1.DateChecked, t1.Name&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 21 Dec 2021 21:08:39 GMT</pubDate>
    <dc:creator>arusoft</dc:creator>
    <dc:date>2021-12-21T21:08:39Z</dc:date>
    <item>
      <title>Join with conditions</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579051#M201797</link>
      <description>&lt;P&gt;I have two tables&lt;/P&gt;&lt;TABLE width="612px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="144px"&gt;EmailX&lt;/TD&gt;&lt;TD width="161px"&gt;Doc&lt;/TD&gt;&lt;TD width="198px"&gt;DateChecked&lt;/TD&gt;&lt;TD width="109px"&gt;Name&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 1&lt;/TD&gt;&lt;TD width="198px"&gt;1/1/2021&lt;/TD&gt;&lt;TD width="109px"&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 2&lt;/TD&gt;&lt;TD width="198px"&gt;1/15/2021&lt;/TD&gt;&lt;TD width="109px"&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="144px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="161px"&gt;Doc 3&lt;/TD&gt;&lt;TD width="198px"&gt;1/30/2021&lt;/TD&gt;&lt;TD width="109px"&gt;b&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE width="340px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;EmailY&lt;/TD&gt;&lt;TD width="196.391px"&gt;DateLogin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;12/10/2022&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;11/10/2022&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.609px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="196.391px"&gt;1/15/2021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a@a.com&lt;/TD&gt;&lt;TD&gt;1/25/2021&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to join them on Emailx &amp;amp; EmailY and then in result&amp;nbsp; for each Email&amp;nbsp; i need to get most recent DateLogin that is before&amp;nbsp;DateChecked.&amp;nbsp; I am hoping to no have to use joins as my second table has more than 50k records.&amp;nbsp;&lt;/P&gt;&lt;P&gt;So the results should be like this&lt;/P&gt;&lt;TABLE width="609px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;EmailX&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;DateChecked&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;Name&lt;/TD&gt;&lt;TD width="54.9844px"&gt;RecentDateLogin&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 1&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/1/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;a&lt;/TD&gt;&lt;TD width="54.9844px"&gt;-&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 2&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/15/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;a&lt;/TD&gt;&lt;TD width="54.9844px"&gt;1/15/2021&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="142.766px" height="25px"&gt;a@a.com&lt;/TD&gt;&lt;TD width="159.578px" height="25px"&gt;Doc 3&lt;/TD&gt;&lt;TD width="196.688px" height="25px"&gt;1/30/2021&lt;/TD&gt;&lt;TD width="53.9844px" height="25px"&gt;b&lt;/TD&gt;&lt;TD width="54.9844px"&gt;1/25/2021&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;So if I have to write a sql, it would be something like below. I haven't tested below , but you get the idea.&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;SELECT t1.EmailX, t1.Doc, t1.DateChecked, t1.Name, max(t2.DateLogin) as RecentDateLogin 
FROM table1 AS t1
LEFT JOIN table 2 AS t2
ON t1.EmailX = t2.EmailY
AND t1.DateChecked&amp;gt;t2.DateLogin
Group By t1.EmailX, t1.Doc, t1.DateChecked, t1.Name&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Dec 2021 21:08:39 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579051#M201797</guid>
      <dc:creator>arusoft</dc:creator>
      <dc:date>2021-12-21T21:08:39Z</dc:date>
    </item>
    <item>
      <title>Re: Join with conditions</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579064#M201801</link>
      <description>&lt;P&gt;Here is an example using your data. You can paste this in to a search window&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| makeresults
| eval _raw="EmailX	Doc	DateChecked	Name
a@a.com	Doc 1	1/1/2021	a
a@a.com	Doc 2	1/15/2021	a
a@a.com	Doc 3	1/30/2021	b
"
| multikv forceheader=1 
| append [
  | makeresults
  | eval _raw="
EmailY	DateLogin
a@a.com	12/10/2022
a@a.com	11/10/2022
a@a.com	1/15/2021
a@a.com	1/25/2021
"
  | multikv forceheader=1 
]
| table Email* Doc Date* Name
| eval dl=strptime(DateLogin, "%m/%d/%Y")
| eval Email=coalesce(EmailX, EmailY)
| eventstats values(dl) as dl by Email
| stats values(*) as * by Email Doc DateChecked Name
| eval dc=strptime(DateChecked, "%m/%d/%Y")
| eval login=0
| eval login=max(mvmap(dl, if(login=0 AND dl&amp;lt;=dc,dl,0)))
| eval ClosestLogin=if(login&amp;gt;0, strftime(login, "%m/%d/%Y"), "-")
| table Email Doc DateChecked Name ClosestLogin&lt;/LI-CODE&gt;&lt;P&gt;The relevant part for you is from the table Email*... line&lt;/P&gt;&lt;P&gt;What you want is to search both data sets and then&lt;/P&gt;&lt;P&gt;1. Make a common Email field from either of the X or Y variants&lt;BR /&gt;2. Collect all login dates for that email (eventstats)&lt;BR /&gt;3. Collapse all data for each email/doc/name/check date&lt;BR /&gt;4. Find the closest login to the checked date (eval statements)&lt;BR /&gt;5. Produce the table&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Dec 2021 22:16:35 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579064#M201801</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2021-12-21T22:16:35Z</dc:date>
    </item>
    <item>
      <title>Re: Join with conditions</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579065#M201802</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.splunk.com/t5/user/viewprofilepage/user-id/6367"&gt;@bowesmana&lt;/a&gt;&amp;nbsp;, This is super cool. My quick test looks good. I will do some more testing and if I see any issues, I will update&lt;/P&gt;</description>
      <pubDate>Tue, 21 Dec 2021 22:39:36 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579065#M201802</guid>
      <dc:creator>arusoft</dc:creator>
      <dc:date>2021-12-21T22:39:36Z</dc:date>
    </item>
    <item>
      <title>Re: Join with conditions</title>
      <link>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579077#M201806</link>
      <description>&lt;P&gt;&lt;a href="https://community.splunk.com/t5/user/viewprofilepage/user-id/196879"&gt;@arusoft&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that using eventstats is not the fastest operation and if you have a clustered index environment, will cause the data to be pushed to the search head for the operation to run there.&lt;/P&gt;&lt;P&gt;I couldn't immediately think of a way to avoid that, that would avoid some more complex logic involving creating complex fields and using mvexpand after a normal stats. Anyway, test as needed.&lt;/P&gt;&lt;P&gt;One thing you should do before using eventstats is to use the fields command to minimise the data that will end up going to the search head. In the above, you would do&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| fields - EmailX EmailY DateLogin&lt;/LI-CODE&gt;&lt;P&gt;before the eventstats.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Dec 2021 06:11:17 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/Join-with-conditions/m-p/579077#M201806</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2021-12-22T06:11:17Z</dc:date>
    </item>
  </channel>
</rss>

