Count unique values between 2 dates - vb.net

I created a simple database that contains dates and name values.I would like to seek some idea how to vba code to count specific value between two days.
The case is like this:
Column A: list of date
Column B:list of Name
For example:
(Col A , Col B) :row1(10/01/19 , Arctic),row2(10/02/19 , Polar),r3(10/02/19 , Polar),r4(10/02/19 , Arctic),r5(10/02/19 , Arctic),r6(10/03/19, Arctic)
Please note that the result I wish to get is:
Counr of Arctic=3
Count of Polar =1
Please note that "Polar" appears twice on 10/02/19, however, I want to count it as 1 only within the range of 10/01/19 to 10/03/19 since these two occurence of "Polar" happen in the same date. Same will be applied to "Arctic" and more names if theres any.
Please see attached image for a clearer data sample.
Thank u in advance.

SELECT T.name, COUNT(*) AS count FROM table T
WHERE T.date > date1 AND T.date < date2
GROUP BY T.name

Related

Multiple Between Dates from table column

There is yearly data in the source. I need to exclude the data -which is in another table and raw count is not static- from it.
Source data:
Dates to be excluded:
There can be 2 raws or 5 raws of data to be excluded, so it need to be dynamically and 2 tables can be bound by the DISPLAY_NAME column.
I am trying to do it with query, don't want to use sp. Is there any way or sp is only choise to do this.
Maybe multiple case when for each raw 1 / 0 and only get if all new case when columns are 1 but issue is don't know how many case when i will use since exclude table data raw count is not static.
Are you looking for not exists?
select s.*
from source s
where not exists (select 1
from excluded e
where e.display_name = s.display_name and
s.start_datetime >= e.start_date and
s.end_datetime < e.end_date
);
Note: Your question does not explain how the end_date should be handled. This assumes that the data on that date should be included in the result set. You can tweak the logic to exclude data from that date as well.

SQL Impala - Grouping by inconsistent variable type and finding min, max, and difference

See attached picture above for how the data is formatted and what my goal is.
I am looking to make a query to group all pairs of the CAB variables together and create new columns for High_BP and Low_BP then find the difference of the these two CABs FR.
I can do this currently when there are just two CAB for every unique ID but some of the unique ID on some DATE and Dest will have anywhere from 2-4 different CAB configurations.
Anyone have any idea on where to start with this?
Thank you so much!
You did not mention your tablename so I just used Yourtable
select table1.Dest
,table1.Date
,table1.ID
,concat(table1.cab, table2.cab) as cab_pair
,case when table1.BP > table2.BP then table2.BP else table1.BP end as Low_BP
,case when table1.BP > table2.BP then table1.BP else table2.BP end as High_BP
,abs(table1.FR-table2.FR) as Diff_FR
from Yourtable as table1
inner join Yourtable as table2
on table1.id=table2.id and table1.cab > table2.cab
The only problem with the query is that the pairing will be done alphabetically with the first letter being farther in the alphabet, so instead of CF it will be FC.

Not contained in eaggregate function/ the GROUP BY AND max date does not show the latest date

I am stucked here and your help will be appreciated. Based on the code that you see below:
I have a sub query with some conditions. especifically, the following:
AND OwnedByTeamJ='C - O Review'
AND OwnedByTeamJ is null
I want to get the results from the subquery,
Do another select on them because all I want is the latest date listed the table. As you can see in the picture, I want to be able to extract row#3 which has the highest date and its own by the team which is null (I guess! since there is no value there).
Now the problems:
1-at first the code worked and I saw all the records! though, it didsn't pick the latest date
2- sudennly it stopped working and saw this error:
Column 'tt.IncidentID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
select
distinct max(LastModifiedDateTimeJ),
incidentID,
EffecRequestStatus,
OwnedByTeamJ
From (
select
EffecRequestStatus,
IncidentID,
LastModifiedDateTimeJ,
OwnedByTeamJ,
DetailsJ,
Status,
OwnedByTeam
from IncidentView
where
CAST(CreatedDateTime as DATE) >='05-01-2019'
AND JournalTypeName like '%Journal - Note%'
AND OwnedByTeamJ='C - O Review'
AND OwnedByTeamJ is null
group by
EffecRequestStatus,
IncidentID,
LastModifiedDateTimeJ,
OwnedByTeamJ,
DetailsJ,
Status,
OwnedByTeam
) as tt
where
tt. RequestStatus not in ('Submission','P-C submission','C Review')
A sample of data look like the following but my table has more columns than that is listed here:
1) These conditions should not coexist:
AND OwnedByTeamJ='C - O Review'
AND OwnedByTeamJ is null
...because these two things are never true at the same time, and you will get an empty result-set. I guess what you want is
AND (OwnedByTeamJ='C - O Review' or OwnedByTeamJ is null)
2) The error you mention does not seem to agree with the query you've shown us. Did you try to make another group by externally?
3) It doesn't make sense to use distinct together with any aggregation function like max,sum, count etc.
4) As long as you have included EffecRequestStatus within the group by, you will get 3 rows, not 1, because all 3 rows have a different value for EffecRequestStatus. You will have to remove it from the group by, and therefore from the select as well, if you only want to see one row.
Try this, if you want to have a not empty result:
AND (OwnedByTeamJ='C - O Review'
OR OwnedByTeamJ is null)

Query to return the amount of time each field equals a true value

I'm collecting data and storing in SQL Server. The table consist of the data shown in the Example Table below. I need to show the amount of time that each field [Fault0-Fault10] is in a fault state. The fault state is represented as a 1 for the fields value.
I have used the following query and got the desired results. However this is for only one field. I need to have the total time for each field in one query. I'm having issues pulling all of the fields into one query.
SELECT
Distinct [Fault0]
,datediff(mi, min(DateAndTime), max(DateAndTime)) TotalTimeInMins
FROM [dbo].[Fault]
Where Fault0 =1
group by [Fault0]
Results
Assuming you want the max() - min(), then you simply need to unpivot the data. Your query can look like:
SELECT v.faultname,
datediff(minute, min(t.DateAndTime), max(t.DateAndTime)) as TotalTimeInMins
FROM [dbo].[Fault] f CROSS APPLY
(VALUES ('fault0', fault0), ('fault1', fault1), . . ., ('fault10', fault10)
) v(faultname, value)
WHERE v.value = 1
GROUP BY v.faultname;

Want to display (and count) rows that have zero out - SQL/SAS

Visual
I have tried the following SQL query already in SAS (if there is a better way to use SAS please let me know):
Select *
From [Database]
Having COUNT(Month)>1 and SUM(Amount)=0;
This then only shows User_ID 003 and User_ID 004. The problem is I need it to show User_ID 001's first and third row since they offset (zero-out) in the same month along with 003 and 004. Basically, I am looking for duplicate values in certain columns with amounts that offset in a dataset that has 20,000+ rows (the Visual link above is not related to the dataset I am working on).
I have also tried separating the data so only positive numbers are in the Amount column and negative numbers are in a second Amount2 column and ran the query to find -Amount in Amount2. This didn't work either.
Thanks in advance.
This will the user_ids where a duplicate case exists in a month
select a.user_id , a.month , amount
from my_table as a
inner join my_table_a as b
on a.user_id = b.user_id
and a.month = b.month
and a.amount = -1 * b.amount